深入浅出Linux-Shell编程[一】

举报
Maynor学长 发表于 2022/09/20 19:37:19 2022/09/20
【摘要】 一、Shell 编程之条件结构1、Shell 条件测试语法test 测试表达式利用test命令进行条件测试表达式,  test命令与测试表达式之间至少有一个空格[ 测试表达式 ]通过[ ]中括号进行条件测试表达式,  []中括号边界与测试表达式之间至少有一个空格[[ 测试表达式 ]]通过[[ ]]双中括号进行条件测试表达式,  [[ ]]双中括号与测试表达式之间至少有一个空格((测试表达式)...

一、Shell 编程之条件结构


1Shell 条件测试语法

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 中,  $(( ))的整数运算符号大致有这些: # + ‐ * / 加、减、乘、除

# % 余数运

# & | ^ ! ANDORXORNOT

举例:

[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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。