bash shell if 命令参数说明
2011-12-20 10:06
441 查看
转】bash shell if 命令参数说明
2011-08-22 14:17
转载自
caosicong
最终编辑
caosicong
2011-08-22 14:17
转载自
caosicong
最终编辑
caosicong
第 7 章 条件语句目录7.1. 介绍if 7.1.1. 概要 7.1.2. if的简单应用 7.2. 更多if的高级使用方法 7.2.1. if/then/else结构 7.2.2. if/then/elif/else结构 7.2.3. if嵌套语句 7.2.4. 布尔操作 7.2.5. 使用exit语句和if 7.3. 使用case语句 7.3.1. 简单的条件 7.3.2. 初始脚本例子 7.4. 总结 7.5. 练习 摘要 本章我们会讨论在Bash脚本中使用条件,包含以下几个话题: if 语句 使用命令的退出状态 比较和测试输入和文件 if/then/else 结构 if/then/elif/else 结构 使用和测试位置参数 嵌套 if 语句 布尔表达式 使用 case 语句 7.1. 介绍if7.1.1. 概要有时候你需要指定shell脚本中的依靠命令的成功与否来实施不同过程的行为。 if 结构允许你来指定这样的条件。最精简的 if 命令的语法是: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUENT-COMMANDS 就执行。返回状态是最后一个命令的退出状态,或者当没有条件是真的话为0。 TEST-COMMAND 经常包括数字和字符串的比较测试,但是也可以是任何在成功时返回状态0或者失败时返回一些其他状态的一些命令。一元表达式经常用于检查文件的状态。如果对某个要素primaries, FILE参数是 /dev/fd/N这样的形式,那么就检查文件描述符 “N”。 stdin, stdout和 stderr和他们各自的文件描述符也可以用于测试。 7.1.1.1. 和if使用的表达式下表包含了一个组成 TEST-COMMAND 命令或者命令列表,称作 “要素primaries” 的概览。这些primaries放置在方括号中来表示一个条件表达式的测试。表 7.1. 主表达式
表 7.2. 组合表达式
7.1.1.2. 后接then语句的命令CONSEQUENT-COMMANDS 列出了跟在then 语句后面可以是任何有效的UNIX命令,任何可执行的程序,任何可执行的shell脚本或者任何shell语句,除了 fi. 。重要地记住 then 和 fi 在shell里面被认为是分开的语句。因此,在命令行上使用的时候,他们用分号隔开。 在脚本中,if语句的不同部分通常是良好分隔的。以下是一些简单的例子: 7.1.1.3. 检查文件第一个例子检查一个文件是否存在:anny ~>cat msgcheck.sh #!/bin/bash echo "This scripts checks the existence of the messages file." echo "Checking..." if [ -f /var/log/messages ] then echo "/var/log/messages exists." fi echo echo "...done." anny ~>./msgcheck.sh This scripts checks the existence of the messages file. Checking... /var/log/messages exists. ...done. [/code] 7.1.1.4. 检查shell选项加入到你的Bash配置文件中去:# These lines will print a message if the noclobber option is set: if [ -o noclobber ] then echo "Your files are protected against accidental overwriting using redirection." fi
7.1.2. if的简单应用7.1.2.1. 测试退出状态?变量包含了之前执行命令的退出状态(最近完成的前台进程)。 以下的例子显示了一个简单的测试: anny ~>if [ $? -eq 0 ] More input>then echo 'That was a good job!' More input>fi That was a good job! anny ~>[/code] 以下的例子证明了 TEST-COMMANDS 可以是任何有返回和退出状态的UNIX命令,之后 if 再次返回零的退出状态: anny ~>if ! grep $USER /etc/passwd More input>then echo "your user account is not managed locally"; fi your user account is not managed locally anny >echo $? 0 anny >[/code] 以下能得到同样的结果: anny >grep $USER /etc/passwd anny >if [ $? -ne 0 ]; then echo "not a local account"; fi not a local account anny >[/code] 7.1.2.2. 数字的比较以下的例子是用了数值的比较:anny > num= `wc -l work.txt` anny >echo $num 201 anny >if [ "$num" -gt "150" ] More input>then echo ; echo "you've worked hard enough for today." More input>echo ; fi you've worked hard enough for today. anny >[/code] 这个脚本在每个星期天由cron来执行。如果星期的数是偶数,他就提醒你把垃圾箱清理: #!/bin/bash # Calculate the week number using the date command: WEEKOFFSET=$[ $(date +"%V") % 2 ] # Test if we have a remainder. If not, this is an even week so send a message. # Else, do nothing. if [ $WEEKOFFSET -eq "0" ]; then echo "Sunday evening, put out the garbage cans." | mail -s "Garbage cans out" your@your_domain.org 7.1.2.3. 字符串比较一个通过比较字符串来测试用户ID的例子:if [ "$(whoami)" != 'root' ]; then echo "You have no permission to run $0 as non-root user." exit 1; fi 使用Bash,你可以缩短这样的结构。下面是以上测试的精简结构: [ "$(whoami)" != 'root' ] && ( echo you are using a non-privileged account; exit 1 ) 类似于如果测试为真就执行的 “&&” 表达式, “||” 指定了测试为假就执行。类似于 “&&” 表达式指明了在两个测试条件为真时所采取的动作,“||” 指明测试为假时所采取的行动。 正则表达式也可以在比较中使用: anny > gender= "female" anny >if [[ "$gender" == f* ]] More input>then echo "Pleasure to meet you, Madame."; fi Pleasure to meet you, Madame. anny >[/code]
shell if 命令参数说明 -b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当pathname指定的文件或目录存在时返回真 -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 -p 当file存在并且是命令管道时返回为真 -r 当由pathname指定的文件或目录存在并且可读时返回为真 -s 当file存在文件大小大于0时返回真 -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真 -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。 比较字符写法: -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -le 小于等于 -ge 大于等于 -z 空串 * = 两个字符相等 * != 两个字符不等 * -n 非空串 |
相关文章推荐
- bash shell if 命令参数说明
- bash shell if 命令参数说明
- Linux SHELL if 命令参数说明
- bash shell if 命令参数说明
- Linux SHELL if 命令参数说明
- Linux SHELL if 命令参数说明
- Linux SHELL if 命令参数说明
- Linux SHELL if 命令参数说明
- Linux SHELL if 命令参数说明
- bash shell if 命令参数说明
- Linux SHELL if命令参数说明
- Linux SHELL if 命令参数说明
- bash if 命令参数说明
- Linux SHELL if 命令参数说明
- bash shell if 命令参数说明
- Linux SHELL if 命令参数说明
- Linux SHELL if 命令参数说明
- linux shell if命令参数说明
- bash shell if 命令参数说明
- Linux SHELL if 命令参数说明