深入浅出Linux-Shell编程[一】
一、Shell 编程之条件结构
1、Shell 条件测试语法
test 测试表达式 |
利用test命令进行条件测试表达式, test命令与测试表达式之间至少有一个空格 |
[ 测试表达式 ] |
通过[ ]中括号进行条件测试表达式, []中括号边界与测试表达式之间至少有一个空格 |
[[ 测试表达式 ]] |
通过[[ ]]双中括号进行条件测试表达式, [[ ]]双中括号与测试表达式之间至少有一个空格 |
((测试表达式)) |
通过(( ))双小括号进行条件测试表达式, ( ))双小括号两端不需要空格, 常用于整数对比 |
1、符号说明
‐su: syntax error near unexpected token `} '
[root@qfedu.com ~]# { var=notest;echo $var;}
notest
[root@qfedu.com ~]# echo $var
notest
# {}修改了变量的值。表明在当前shell中运行的
[root@qfedu.com ~]# var=test
[root@qfedu.com ~]# echo $var
test
[root@qfedu.com ~]# (var=notest;echo $var)
notest
[root@qfedu.com ~]# echo $var
test
# () 里的执行完毕后没有改变变量的值, 说明在子shell中执行的
# $(( ))和$[ ]的用途一致 ,用来作整数运算。在 bash 中, $(( ))的整数运算符号大致有这些: # + ‐ * / 加、减、乘、除
# % 余数运算
# & | ^ ! AND、OR、XOR、NOT运算
举例:
[root@qfedu.com ~]# a=5; b=7; c=2
[root@qfedu.com ~]# echo $((a+b*c))
[root@qfedu.com ~]# echo $[a+b*c]
[root@qfedu.com ~]# echo $(((a+b)/c))
[root@qfedu.com ~]# echo $[(a+b)/c]
6
[root@qfedu.com ~]# echo $(((a*b)%c))
[root@qfedu.com ~]# echo $[(a*b)%c]
1
# $(( ))中的变量名称也可以在其前面加 $ 符号: $(($a+$b*$c))也可以得到 19 的结果。
# $(( ))还可以作不同进制(如二进制、八进位、十六进制)运算, 只是输出结果皆为十进制而已。
[root@qfedu.com ~]# echo $((16#2a)) # 16进位转十进制
42
# 当前的 umask 是 022, 新建文件的权限为:
[root@qfedu.com ~]# umask 022
[root@qfedu.com ~]# echo "obase=8; $(( 8#666 & (8#777 ^ 8#$(umask)) ))" | bc
[root@qfedu.com ~]# 644
# 单纯用(( ))也可以重定义变量值, 或作testing:
[root@qfedu.com ~]# a=5
[root@qfedu.com ~]# echo $((a++))
# 将 a 重定义为 6
双中括号[[ ]]中可以使用通配符进行匹配, 这是其区别于其它几种语法的地方
&&, | |, <, >等操作符可用于双中括号[[ ]]中, 但不能应用于[ ]中, 在[ ]中一般用-a, -o, -lt, -gt来代替
举例:
[root@qfedu.com ~]# test ‐f /tmp/test.txt && echo 1 | | echo 0 [root@qfedu.com ~]# [ ‐f /tmp/test.txt ] && echo 1 | | echo 0 [root@qfedu.com ~]# [[ ‐f /tmp/test.txt ]] && echo 1 | | echo 0 [root@qfedu.com ~]# ((3>2)) && echo 1 | | echo 0 |
2、获取帮助
[root@qfedu.com ~]# man test |
- 点赞
- 收藏
- 关注作者
评论(0)