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)
    -gtn1 大于 n2 (greater than)
    -ltn1 小于 n2 (less than)
    -gen1 大于等于 n2 (greater than or equal)
    -len1 小于等于 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

sh [-nvx] scripts.sh

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值