Shell Scripts

这篇具有很好参考价值的文章主要介绍了Shell Scripts。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、相关概念

1. 什么是Shell scripts

  • 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的;

2. Shell scripts的作用

  • 自动化管理的重要依据;

  • 追踪与管理系统的重要工作;

  • 简单入侵侦测功能;

  • 连续指令单一化;

  • 简单的数据处理;

  • 跨平台支持与学习历程较短;

3. 注意事项

  • 指令的执行是从上而下、从左而右的分析与执行;

  • 指令、选项与参数间的多个空白都会被忽略掉;

  • 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键;

  • 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令;

  • 至于如果一行的内容太多,则可以使用“ [Enter] ”来延伸至下一行;

  • “ # ”可做为注解!任何加在 # 后面的数据将全部被视为注解文字而被忽略;

4. 执行方法

  • 直接指令下达(需要有rx权限):绝对路径/home/root/shell.sh、相对路径./shell.sh;

  • 以bash程序来执行:bash shell.sh或sh shell.sh;

5. 编写习惯

  • script的功能;

  • script的版本信息;

  • script 的作者与联络方式;

  • script 的版权宣告方式;

  • script 的 History (历史纪录);

  • script 内较特殊的指令,使用“绝对路径”的方式来下达;

  • script 运行时需要的环境变量预先宣告与设置。

二、script相关语法

1. script执行方式的差异

  • 利用直接执行的方式执行script:使用绝对路径、相对路径、${PATH}内、bash或sh下执行都是在子程序中执行的,执行完后所有的数据便被移除;

  • 利用source来执行script:会在父程序当中执行;

2. 判断式

  • 利用test指令的测试功能

    测试的标志 代表意义
    1. 关于某个文件名的“文件类型”判断
    -e 该“文件名”是否存在?(常用)
    -f 该“文件名”是否存在且为文件(file)?(常用)
    -d 该“文件名”是否存在且为目录(directory)?(常用)
    -b 该“文件名”是否存在且为一个 block device 设备?
    -c 该“文件名”是否存在且为一个 character device 设备?
    -S 该“文件名”是否存在且为一个 Socket 文件?
    -p 该“文件名”是否存在且为一个 FIFO (pipe) 文件?
    -L 该“文件名”是否存在且为一个链接文件?
    2. 关于文件的权限侦测
    -r 侦测该文件名是否存在且具有“可读”的权限?
    -w 侦测该文件名是否存在且具有“可写”的权限?
    -x 侦测该文件名是否存在且具有“可执行”的权限?
    -u 侦测该文件名是否存在且具有“SUID”的属性?
    -g 侦测该文件名是否存在且具有“SGID”的属性?
    -k 侦测该文件名是否存在且具有“Sticky bit”的属性?
    -s 侦测该文件名是否存在且为“非空白文件”?
    3. 两个文件之间的比较
    -nt (newer than)判断 file1 是否比 file2 新
    -ot (older than)判断 file1 是否比 file2 旧
    -ef 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上。 主要意义在判定,两个文件是否均指向同一个 inode 哩!
    4. 关于两个整数之间的判定
    -eq 两数值相等 (equal)
    -ne 两数值不等 (not equal)
    -gt n1 大于 n2 (greater than)
    -lt n1 小于 n2 (less than)
    -ge n1 大于等于 n2 (greater than or equal)
    -le n1 小于等于 n2 (less than or equal)
    5. 判定字串的数据
    test -z string 判定字串是否为 0 ?若 string 为空字串,则为 true
    test -n string 判定字串是否非为 0 ?若 string 为空字串,则为 false。 -n 亦可省略
    test str1 == str2 判定 str1 是否等于 str2 ,若相等,则回传 true
    test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false
    6. 多重条件判定
    -a (and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。
    -o (or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。
    ! 反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true
  • 判断符号[]

    • 在中括号 [] 内的每个元件都需要有空白键来分隔;

    • 在中括号内的变量,最好都以双引号括号起来;

    • 在中括号内的常数,最好都以单或双引号括号起来;

  • 默认变量

    • $# :代表后接的参数“个数”,以上表为例这里显示为“ 4 ”;

    • $@ :代表“ "$1" "$2" "$3" "$4" ”之意,每个变量是独立的(用双引号括起来);

    • $* :代表“ "$1c$2c$3c$4" ”,其中 c 为分隔字符,默认为空白键, 所以本例中代表“ "$1 $2 $3 $4" ”之意;

    • shift:shift 会移动变量,而且 shift 后面可以接数字,代表拿掉最前面的几个参数的意思;

3. 条件判断式

  • if...then

    • 单层、简单条件判断式

      if [ 条件判断式 ]; then
        当条件判断式成立时,可以进行的指令工作内容;
      fi   <==将 if 反过来写,结束 if 之意
    • 多重、复杂条件判断式

      # 一个条件判断,分成功进行与失败进行 (else)
      if [ 条件判断式 ]; then
        当条件判断式成立时,可以进行的指令工作内容;
      else
        当条件判断式不成立时,可以进行的指令工作内容;
      fi
      # 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
      if [ 条件判断式一 ]; then
        当条件判断式一成立时,可以进行的指令工作内容;
      elif [ 条件判断式二 ]; then
        当条件判断式二成立时,可以进行的指令工作内容;
      else
        当条件判断式一与二均不成立时,可以进行的指令工作内容;
      fi
  • case...esac

    case  $变量名称 in   <==关键字为 case ,还有变量前有钱字号
      "第一个变量内容")   <==每个变量内容建议用双引号括起来,关键字则为小括号 )
      程序段
      ;;            <==每个类别结尾使用两个连续的分号来处理!
      "第二个变量内容")
      程序段
      ;;
      *)                  <==最后一个变量内容都会用 * 来代表所有其他值
      不包含第一个变量内容与第二个变量内容的其他程序执行段
      exit 1
      ;;
    esac                  <==最终的 case 结尾

4. function功能

  • 在 shell script 当中的 function 的设置一定要在程序的最前面;

  • function 拥有内置变量,他的内置变量与 shell script 很类似, 函数名称代表示 $0 ,而后续接的变量也是以 $1, $2... 来取代;

    function fname() {
      程序段
    }

5. 循环

  • while do done,until do done

    while [ condition ]  <==中括号内的状态就是判断式
    do            <==do 是循环的开始!
      程序段落
    done          <==done 是循环的结束
    until [ condition ]
    do
      程序段落
    done
  • for...do...done

    for var in con1 con2 con3 ...
    do
      程序段
    done
    for (( 初始值; 限制值; 执行步阶 ))
    do
    	程序段
    done

6. shell script的追踪与debug文章来源地址https://www.toymoban.com/news/detail-438610.html

sh [-nvx] scripts.sh

选项与参数:
-n:不要执行 script,仅查询语法的问题;
-v:再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x:将使用到的 script 内容显示到屏幕上,这是很有用的参数;

到了这里,关于Shell Scripts的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端工程化】配置package.json中scripts命令脚本,新手必学

    每日鸡汤:你总要努力追上那个曾经被赋予众望的自己吧 目录 前言 一、运行npm run 命令之后会干啥? 1. scripts里面写啥 2. node_modules/.bin 二进制可执行文件 二、运行插件配置 1. 运行某个npm包的命令 2. 多个命令一起运行  总结 配置package.json中scripts脚本是node开发中第一技能。

    2024年02月05日
    浏览(30)
  • Stable Diffusion 使用lora-scripts WebUI训练LoRA模型

    如果对代码使用有困难的小伙伴可以直接使用WebUI版的LoRA模块进行训练操作。不管是训练人物,场景,风格,还是服装都是一套通用的模式,仅仅是使用不同的数据集得到的结果不同。 使用 git clone --recurse-submodules https://gi

    2024年02月17日
    浏览(41)
  • stable-diffusion打造自己的lora模型(使用lora-scripts)

    1、训练图片收集 比如要训练一个自己头像的模型,就可以拍一些自己的照片(20-50张,最少15张),要求画质清晰,脸部轮廓清楚,背景较为简单的照片。 2、使用stable_diffusion的预处理功能进行图片的预处理 这里可以根据自己的情况设置不同的宽高,以及相关的设置项,设置

    2024年02月03日
    浏览(35)
  • chrome插件开发实例02-使用content_scripts对用户浏览页面操作

    目录 引言 chrome插件 插件演示 源代码 manifest.json content_scripts.js

    2024年02月14日
    浏览(26)
  • Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析

    指定在用户打开某些网页时要使用的 JavaScript 或 CSS 文件。 内容脚本是在网页环境中运行的文件。通过使用标准文档对象模型 ( DOM ),开发者能够读取浏览器所访问网页的详情、更改这些网页,并将信息传递给其父级扩展程序。 内容脚本在声明扩展程序文件为可通过网络访问

    2024年01月19日
    浏览(28)
  • 无法加载文件\venv\Scripts\activate.ps1

    在pycharm终端出现报错:无法加载文件venvScriptsactivate.ps1,因为在此系统上禁止运行脚本。 解决方法第一步:终端输入 get-executionpolicy ,回车返回Restricted。 解决方法第二步:.复制Windows Powershall在windows以管理员的身份运行,命令窗口输入 set-executionpolicy   remotesigned ,回车,

    2024年02月14日
    浏览(39)
  • gem5学习(13):使用默认配置脚本——Using the default configuration scripts

    目录 一、A tour of the directory structure 1、boot/ 2、common/ 3、dram/ 4、example/ 5、learning_gem5/ 6、network/ 7、nvm/ 8、ruby/ 9、splash2/ 10、topologies/ 二、Using se.py and fs.py 三、Some common options se.py and fs.py 在这个教程中,将探讨如何使用gem5附带的默认配置脚本。 gem5附带了许多配置脚本,使

    2024年01月16日
    浏览(43)
  • Shell编程 管道和重定向 | 基本概念及其相关应用

    在Linux中,管道和重定向是非常有用的工具,用于处理命令的输入和输出。它们允许你将多个命令组合在一起,将命令的输出发送到文件或从文件中读取输入。以下是有关Linux管道和重定向的详细介绍,并附带了丰富的示例: 管道符号 | 用于将一个命令的输出传递给另一个命

    2024年01月18日
    浏览(33)
  • scripts may close only the windows that were opened by them.

    调用window.close() 无效 并在控制台看到如下警告 scripts may close only the windows that were opened by them. 可使用以下代码

    2024年02月04日
    浏览(22)
  • npm ERR! node-sass@6.0.1 postinstall: `node scripts/build.js`

    vue npm install提示以下错误  尝试用下面的方式重新安装弄得-saas,结果不起作用 。 npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass npm install node-sass 这时考虑降级node版本,node.js从10.0-8.17版本。  运行npm install还是报同样的错误 最后继续查找解决方案,发现使用下面的

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包