shell中的条件判断、参数以及变量替换

http://www.cnblogs.com/maxupeng/archive/2011/07/02/2096551.html

https://blog.csdn.net/xingzhi2014/article/details/22859509

https://www.cnblogs.com/wangkongming/p/4936825.html

 

 

一、test命令

  test命令是shell内部命令,它计算作为其参数的表达式是真还是假。

  如果表达式为真,则test返回0(注意与C语言0表示false不同),如果表达式为假,返回非0。

  shell提供了另外一个调用test命令的方式,就是用方括号[]来代替单词test。

  调用test命令的格式为:

    test expr1 opr expr2 或是 [ expr1 opr expr2 ]

    test opr expr1 或是 [ opr expr1 ]

  (注意方括号与表达式之间的空格必须存在

二、逻辑运算符

  -a  expr1 -a expr2  逻辑与

  -o  expr1 -o expr2  逻辑或

  !  !expr1      逻辑非

三、数值判断

  -eq  num1 -eq num2  是否相等

  -ne  num1 -ne num2  是否不相等

  -gt  num1 -gt num2  是否大于

  -ge  num1 -ge num2  是否大于等于

  -lt  num1 -lt num2  是否小于

  -le  num1 -le num2  是否小于等于

四、字符串判断

  =  str1 = str2  字符串是否相等

  !=  str1 != str2  字符串是否不等

  -n  -n str1    字符串长度是否不等于0

  -z  -z str2    字符串长度是否等于0

五、文件判断

  -r  -r filename  文件是否存在且可读

  -w  -w filename  文件是否存在且可写

  -s  -s filename  文件是否存在且长度非0

  -f  -f filename  文件是否存在且是普通文件

  -d  -d filename  文件是否存在且是一个目录

六、命令行参数/位置变量

  $0  脚本的名字

  $1, $2, ..., $9  脚本第1个到第9个命令行参数

  $#  命令行参数的个数

  $@ 或是 $*  所有命令行参数

  $?  最后一条命令的退出状态

  $$  正在执行进程的ID(PID)

  给位置变量赋值:

  set One Two Three

  echo $1 $2 $3

  结果显示:One Two Three

  shift命令:

    这条命令可以对位置参数进行移动,每次调用都会导致:$1=$2、$2=$3、$3=$4....

    以下代码可以打印出所有的参数

    while [ -n "$1" ]

    do

      echo $1

      shift

    done

七、

  当在对变量进行判断时最好将变量用双引号括起来,这样可以避免参数包含空格或是TAB带来的问题。

  如:”$HOME“、"$#"

八、变量替换(赋值)

  shell提供了变量替换功能,使用户能够检查变量的值并根据选项改变它的值。

  $variable    保存在variable中的值

  ${variable}    保存在variable中的值

  ${variable:-string}  如果variable的值非空,则值为variable,否则值为string

  ${variable:+string}  如果variable的值非空,则值为string,否则值为空

  ${variable:=string}  如果variable的值非空,则值为variable,否则值为string且variable的值设置为string

  ${variable:?string}  如果variable的值非空,则值为variable,否则显示string并退出

千里之行,始于足下。改变现在,就是改变未来。改变未来,从现在开始。 个人网站:http://www.wangkongming.cn

分类: Linux

谢谢Lee.MaRS很好的建议,他提醒大家:“这篇文章的内容主要适用于bash。不能保证在其他shell中也适用,诸如zsh等。:)”

====

以下是可替换的参数:

${ Parameter } shell 读取从 ${ 到匹配的 } 之间的所有字符,作为同一个字的部分,即使该字包含大括号或元字符。如果有,替换指定的参数的值。以下情况下大括号是必需的:当 Parameter 参数后跟一个不被解释为其名称一部分的字母、数字或下划线时,或当一个命名的参数进行下标操作时。
如果指定的参数包含一个或多个数字,则它是一个位置参数 。多个数字的位置参数必须括起在大括号中。如果变量的值是 * 或 @,则替换每个以 $1 开始的位置参数(由字段分隔符分隔)。如果使用了一个带下标 * 或 @ 的数组标识,则替换每个元素(用字段分隔符分隔)的值。

${# Parameter } 如果 Parameter 参数的值是 * 或 @, 则替换位置参数的数量。否则,替换 Parameter 参数指定的长度。

${# Identifier [* ]} 替换 Identifier 参数指定的数组中的元素数。

${ Parameter :- Word } 如果设置了 Parameter 参数并且不为空,则替换其值;否则,替换 Word 参数的值。

${ Parameter – Word } 如果设置了 Parameter 参数,则替换其值;否则,替换 Word 参数的值。

${ Parameter : = Word } 操作符: 和= 没有空格, 如果未设置 Parameter 参数或其为空,则将它设置为 Word 参数的值。不能用这种方法指定位置参数。

${ Parameter : ?Word } 如果设置了 Parameter 参数并且它不为空,则替换其值。否则,打印 Word 变量的值并从 shell 退出。如果省略 Word 变量,则打印标准消息。

${ Parameter :+ Word } 如果设置了 Parameter 参数并且它不为空,则替换 Word 变量的值。

${ Parameter # Pattern } | ${ Parameter ## Pattern } 如果指定的 shell Pattern 参数匹配 Parameter 参数的值的开始部分,则此替换的值是 Parameter 参数删除匹配部分后的值。否则,替换 Parameter 参数的值。在第一种格式中,删除最小匹配模式。在第二种格式中,删除最大匹配模式。

${ Parameter % Pattern } | ${ Parameter %% Pattern } 如果指定的 shell Pattern 匹配 Parameter 变量的值的结束部分,则此替换的值是 Parameter 变量删除匹配部分后的值。否则,替换 Parameter 变量的值。在第一种格式中,删除最小匹配模式;在第二种格式中,删除最大匹配模式。

在先前的表达式中,Word 变量不被求值,除非它用作替换的字符串。这样,在下例中,pwd 命令只在没有设置 -d 标志或它为空时才执行:

echo ${d:-$(pwd)}

注: 如果 : 被从先前表达式中省略,则 shell 仅检查是否设置了 Parameter 参数。

PS:上述内容主要是来自IBM的shell学习资料.
PS:上述的pattern并不是正则,而是通配符规则。
PS:注意在${}里如果要使用变量,就不用加$符号了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值