Shell脚本--结构化命令
2016-02-02 15:07
585 查看
if-then语句
格式如下:if commad then commands fi
bash shell的if语句会运行if行定义的那个命令。如果该命令的退出状态码是0(该命令行成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他什么值,then部分的命令就不会执行。
if-then-else语句
格式如下:if command then commands else commands fi
嵌套if
格式如下:if command1 then commands elif command2 then more commands fi
test命令
test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回状态码0.test格式非常简单:
test condition
当用在if-then语句中,test命令看起来是这样的:
if test condition then commands fi
bash shell提供了另一种在if-then语句中声明test命令的方法:
if [ condition ] then commands fi
方括号定义了test命令中用到的条件。注意,左括号右侧和右括号左侧都需加一个空格,否则会报错。
test命令可以判断3类条件:
- 数值比较
- 字符串比较
- 文件比较
数值比较
test命令的数值比较功能比较 | 描述 |
---|---|
n1 -eq n2 | 检查n1是否与n2相等 |
n1 -ge n2 | 检查n1是否大于等于n2 |
n1 -gt n2 | 检查n1是否大于n2 |
n1 -le n2 | 检查n1是否小于等于n2 |
n1 -lt n2 | 检查n1是否小于n2 |
n1 -ne n2 | 检查n1是否不等于n2 |
字符串比较
test命令的字符串比较功能比较 | 描述 |
---|---|
str1 = str2 | 检查str1是否和str2相同 |
str1 != str2 | 检查str1是否和str2不同 |
str1 < str2 | 检查str1是否比str2小 |
str1 > str2 | 检查str1是否比str2大 |
-n str1 | 检查str1的长度是否非0 |
-z str1 | 检查str1的长度是否为0 |
比较字符串顺序时,大于小于符号必须转义,否则会理解为重定向符;大于小于顺序和sort命令所采用的不同。
文件比较
test命令的文件比较功能比较 | 描述 |
---|---|
-d file | 检查file是否存在并是一个目录 |
-e file | 检查file是否存在 |
-f file | 检查file是否存在并是一个文件 |
-r file | 检查file是否存在并可读 |
-s file | 检查file是否存在并非空 |
-w file | 检查file是否存在并可写 |
-x file | 检查file是否存在并可执行 |
-O file | 检查file是否存在并属于当前用户所有 |
-G file | 检查file是否存在并且默认组和当前用户相同 |
file1 -nt file2 | 检查file1是否比file2新 |
复合条件测试
有两种布尔运算符可用:[ condition ] && [ condition2 ]
[ condition ] || [ condition2 ]
if-then高级特性
双尖括号
命令格式如下:((expression))
术语expression可以是任意的数学赋值或比较表达式。双尖括号命令中会用到的其他运算符如下:
符号 | 含义 |
---|---|
val++ | 后增 |
val– | 后减 |
++val | 先增 |
–val | 先减 |
! | 逻辑求反 |
~ | 位求反 |
** | 幂运算 |
<< | 左位移 |
>> | 右位移 |
& | 位布尔和 |
| | 位布尔或 |
&& | 逻辑和 |
|| | 逻辑或 |
双方括号
格式如下:[[ expression ]]
双括号里的expression使用了test命令中采用的标准字符串进行比较。它还提供了test命令未提供的另一个特性—-模式匹配。例如你可以定义一个正则表达式来匹配字符串:
if [[ $USER == r* ]]
双方括号命令匹配$USER环境来看它是否以字母r开头。如果是的话,比较就会通过。
case命令
使用case命令,而不用写出那么多elif语句来不断检查相同变量值。case命令会检查单个变量列表格式的多个值:case variable in pattern1 | pattern2) commands1:: pattern3) commands2:: *) default commands:: esac
相关文章推荐
- Linux socket 初步
- android wifi 无线调试
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)