shell脚本中命令参数笔记

今日熟悉命令参数笔记

一.test

  test命令是shell环境中测试条件表达式的实用工具,它可以用[ ]来代替我们输入的 test这个命令, 其中 test EXPRESSION 它可以表示成 [ EXPRESSION ] 跟 [·[ 扩展正则表达式 ]] ,注意其中的扩展正则表达式前后必须有空白字符。
  它用途广泛可以分为下面几大类。

1.判断表达式

Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!“最高,”-a"次之,"-o"最低

if test       #表达式为真
if test !      #表达式为假
test 表达式1 –a 表达式2   #两个表达式都为真
test 表达式1 –o 表达式2   #两个表达式有一个为真
test 表达式1 ! 表达式2    #条件求反

注意test下正则表达式的语法规则

[[ “$1” =~ 扩展正则表达式 ]] 变量加双引号 ,扩展不需要,中括号前后必须有空白字符。

2.判断字符串

test –n 字符串      #字符串的长度不为零则为真
test –z 字符串      #字符串的长度为零则为真
test 字符串1=字符串2   #字符串是否相等,若相等返回true
test 字符串1!=字符串2   #字符串是否不等,若不等返回true


3. 判断整数

test 整数1 -eq(equal的缩写) 整数2   #整数相等
test 整数1 -ge(greater&equal的缩写) 整数2   #整数1大于等于整数2
test 整数1 -gt (greater than的缩写) 整数2   #整数1大于整数2
test 整数1 -le (lower&equal的缩写) 整数2   #整数1小于等于整数2
test 整数1 -lt (lower than的缩写) 整数2    #整数1小于整数2
test 整数1 -ne (not equal的缩写) 整数2   #整数1不等于整数2


4.判断文件

test File1 –ef File2    两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。
test File1 –nt File2    判断文件1是否比文件2新
test File1 –ot File2    判断文件1比是否文件2旧
test –b file        #文件是否块设备文件
test –c File        #文件并且是字符设备文件
test –d File       #文件并且是目录
test –e File       #文件是否存在 (常用)
test –f File        #文件是否为正规文件 (常用)
test –g File       #文件是否是设置了组id
test –G File       #文件属于的有效组ID
test –h File       #文件是否是一个符号链接(同-L)
test –k File       #文件是否设置了Sticky bit位
test –b File       #文件存在并且是块设备文件
test –L File       #文件是否是一个符号链接(同-h)
test –o File       #文件的属于有效用户ID
test –p File       #文件是一个命名管道
test –r File       #文件是否可读
test –s File       #文件是否是非空白文件
test –t FD       #文件描述符是在一个终端打开的
test –u File       #文件存在并且设置了它的set-user-id位
test –w File       #文件是否存在并可写
test –x File       #文件属否存在并可执行


  这个命令使用太频繁了,不过常用基本不用 test 这个在命令行中,基本都是用"[ ]" 这个代替了。


二.read

  read命令从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY

常用参数:

-p 指定要显示的提示
-s 静默输入,一般用于密码
-n N 指定输入的字符长度N
-d ‘字符’ 输入结束符
-t N TIMEOUT为N秒 read 从标准输入中读取值,给每个单词分配一个变量 所有剩余单词都被分配给最后一个变量
变量:指定读取值的变量名。

格式例子:
read -p “Enter a filename: “ FILE
注意! read 后面的变量不需要加 $


三 . 条件判断 if else

语法:

多分支

if  判断条件1; 
    then  条件1为真的分支代码 
    elif 判断条件2; then  
        条件2为真的分支代码 
    elif 判断条件3; then  
        条件3为真的分支代码 
    else  
        以上条件都为假的分支代码 
fi 

逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个 if 语句。
以下实例判断两个变量是否相等:

a=10
b=20
if [ $a == $b ]
  then
      echo "a 等于 b"
  elif [ $a -gt $b ]
  then
      echo "a 大于 b"
  elif [ $a -lt $b ]
  then
      echo "a 小于 b"
else
 echo "没有符合的条件"
fi

输出结果:

a 小于 b

if else 语句经常与 test 命令结合使用,如下所示:

num1=$[2*3]
num2=$[1+5]
if [ "$num1" -eq "$num2" ]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi 

输出结果:

两个数字相等


四. case 判断语句

  Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。 case语句格式如下:

case 变量 in
模式1)
   command1
   command2
   ...
   commandN
   ;;
模式2)
   command1
   command2
   ...
   commandN
   ;;
esac  

case工作方式如上所示。取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;; 。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
case支持glob风格的通配符: *: 任意长度任意字符 ?: 任意单个字符 [ ] :指定范围内的任意单个字符 a|b: a或b
下面的脚本提示输入1到4,与每一种模式进行匹配:

read -p "请输入1-4之间的数字: " aNUm
case $aNUm  in
    1)
      echo "你输入的数字为 1 " 
      ;;
    2)
      echo "你输入的数字为 2 "
      ;;
    3)
      echo "你输入的数字为 3 "
      ;; 
    4)
      echo "你输入的数字为 4 "
      ;;
    *) 
      echo "你输入的数字没有 1-4 "
      ;;
esac 

输入不同的内容,会有不同的结果,例如:

输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值