设为首页 收藏本站
查看: 1113|回复: 0

Linux系统Bash(Shell)基础知识(3)

[复制链接]

尚未签到

发表于 2018-8-26 13:22:48 | 显示全部楼层 |阅读模式
  在shell脚本编程中算术运算无疑是十分重要的;
  bash中执行整数算数运算的命令是let,其语法格式为:
  let arg...
  arg为单独的算术表达式如+,-,*,/,%,^等所构成的完整的算术表达式;
  其中^为平方运算,如2^3表示2的三次方;
  let命令可以使用如下方式替代:
  ((算术表达式))
  例如
  [root@localhost wjq]# let "a=2*3"
  [root@localhost wjq]# echo $a
  6
  [root@localhost wjq]# (("a=3*3"))
  [root@localhost wjq]# echo $a
  9
  除了简单的加减乘除运算,算术运算中还包括增强型运算方式和特殊的增强型运算方式;
  增强型运算方式:
  +=:如a+=b-->a=a+b
  -+:如a-=b-->a=a-b
  *=:如a*=b-->a=a*b
  %=:如a%=b-->a=a%b
  /=:如a/=b-->a=a/b
  转化为let命令运算为:
  [root@localhost wjq]# b=5
  [root@localhost wjq]# let "a+=b"
  [root@localhost wjq]# echo $a
  14
  [root@localhost wjq]#
  特殊增强型运算:
  a++:a先将值赋给变量,再+1;
  ++a:a先+1,再将值赋给变量;
  a--:a先将值赋给变量,再-1;
  --a:a先-1,再将值赋给变量;
  转化为let命令的运算方式为:
  [root@localhost wjq]# a=4
  [root@localhost wjq]# b=5
  [root@localhost wjq]# let "a++"
  [root@localhost wjq]# let "a+=b"
  [root@localhost wjq]# echo $a
  10
  算术运算方法:
  ① let VAR=算术表达式
  #let “B=5+4”
  #echo $B
  将算术表达式先行进行算术运算,并将运算得到的结果保存到变量VAR;
  变量:存储数据的容器
  弱变量:弱类型变量,默认是字符型变量,数值型(不包括浮点型)
  ② VAR=$[算术表达式]
  [root@localhost wjq]# a=$[a*b]
  [root@localhost wjq]# echo $a
  50
  ③ VAR=$((算术表达式))
  算术表达式中如果有引用就用$引用,也可以省略
  [root@localhost wjq]# a=$((a*b))
  [root@localhost wjq]# echo $a
  250
  ④ exper ARGU1 ARGU2 ARGU3
  ARGU1和ARGU3 必须是数值
  ARGU2是运算符
  ⑤ echo “算术表达式” | bc(bc命令相当于计算器)
  [root@localhost wjq]# echo "3*4" | bc
  12
  条件测试语句:
  条件测试有三种测试语句
  一是test命令;
  二是用一堆方括号将其括起来,而这是完全等价的;
  test -f "/etc/passwd" 完全等价于 [ -f "/etc/passwd" ]
  三是[[条件表达式]];
  这三种表达式可以和多种系统运算符结合使用,这些系统运算符可以分为四类:数值测试运算符,字符串测试运算符,文件状态测试运算符,逻辑测试运算符;
  下列四种运算符皆在此使用第二种表达方式表示;
  数据测试运算符:使用双目操作符进行运算;
  [ n1 -eq n2 ]:测试n1和n2是否相等,相等为真,不等为假
  [ n1 -ne n2 ]:测试n1和n2是否不相等,不等为真,相等为假;
  [ n1 -lt n2 ]:测试的n1和n2,左边的是否小于右边的,小于为真,大于为假;
  [ n1 -gt n2 ]:测试的n1和n2,左边的是否大于右边的,大于为真,小于为假;
  [ n1 -le n2 ]:测试的n1和n2,左边的是否小于等于右边的;
  例
  [root@localhost wjq]# [ "$a" -eq 0 ] && echo "a等于0" || echo "a不等于0"
  a不等于0
  字符串测试运算符:
  使用单目运算符进行操作;
  -z ‘n1’:如果字符串长度为0,则测试条件为真;
  -n ‘n1’:如果字符串长度不为0;非空为真,空为假;
  [root@localhost wjq]# a='string'
  [root@localhost wjq]# [ -z "$a" ] && echo "a等于0" || echo "a不等于0"
  a不等于0
  使用双目运算符进行操作:
  ==|=:被测试的两个字符串是否相等,相同为真,不同为假;
  !=:被测试的两个字符是否不相同,不同为真,相同为假;
  >:被测试的两个字符串在转化为ascll码后的二进制数据;左边是否大于右边,大于为真,小于为      假;
  >:被测试的两个字符串在转化为ascll码后的二进制数据,左边是否小于右边,小于为真,大于为      假;
  例
  ①
  [root@localhost wjq]# a='string'
  [root@localhost wjq]# b='string'
  [root@localhost wjq]# [ "$a" == "$b" ] && echo "a等于b" || echo "a不等于b"
  a等于b
  ②
  [root@localhost wjq]# a='string'
  [root@localhost wjq]# b='str'
  [root@localhost wjq]# [ "$a" != "$b" ] && echo "a不等于b" || echo "a等于b"
  a不等于b
  ③
  [root@localhost wjq]# a='string'
  [root@localhost wjq]# b='str'
  [root@localhost wjq]# [ "$a" > "$b" ] && echo "a大于b" || echo "a小于b"
  a大于b
  文件状态测试运算符:单目测试运算符;
  文件存在性测试,如果测试的文件存在为真,不存在为假;
  -a|-e:
  例
  [root@localhost wjq]# [ -a ./8yu ] && echo "文件存在" || echo "文件不存在"
  文件存在
  文件类型测试(测试存在性)
  -b file:若文件存在并且为块设备,则测试为真;
  -c file:若文件存在并且为字符设备,则测试为真;
  -d file:若文件存在并且为目录设备,则测试为真;
  -f file:若文件存在并且为文本文档,则测试为真;
  -h|-L file:若文件为存在并且为符号链接文件,则测试为真;
  -p file:若文件存在并且为套接字文件,则测试为真;
  例
  [root@localhost wjq]# [ -f ./8yu ] && echo "文件为文本文档" || echo "文件不是文本文档"
  文件为文本文档
  文件的访问权限设置:
  -r file:若文件存在并且是用户可读,则测试为真;
  -w file:若文件存在并且是用户可写,则测试为真;
  -x file:若文件存在并且是用户可执行的,则测试为真;
  例
  [root@localhost wjq]# [ -r ./8yu ] && echo "文件可读" || echo "文件不可读"
  文件可读
  [root@localhost wjq]# [ -w ./8yu ] && echo "文件可写" || echo "文件不可写"
  文件可写
  [root@localhost wjq]# [ -x ./8yu ] && echo "文件可执行" || echo "文件不可执行"
  文件可执行
  文件特殊权限标识测试:
  -u file:若文件存在并且设置了SUID权限,则测试为真;否则为假;
  -g file:若文件存在并且设置了SGID权限,则测试为真;否则为假;
  -k file:若文件存在并且设置了sticky权限,则测试为真;否则为假;
  例
  [root@localhost wjq]# [ -u ./8yu ] && echo "文件存在SUID权限" || echo "文件不存在SUID权   限"
  文件不存在SUID权限
  [root@localhost wjq]# [ -g ./8yu ] && echo "文件存在SGID权限" || echo "文件不存在SGID权   限"
  文件不存在SGID权限
  [root@localhost wjq]# [ -k ./8yu ] && echo "文件存在STICKY权限" || echo "文件不存在     STICKY权限"
  文件不存在SUID权限
  文件所有权测试:
  -O file:若文件存在并且其属主为当前有效用户,则测试为真;否则为假;
  -G file:若文件存在并且其属组是为当前有效用户,则测试为真;否则为假;
  例
  [root@localhost wjq]# [ -O ./8yu ] && echo "文件存在且其属主为当用户" || echo "文件不存   在"
  文件不存在
  [root@localhost wjq]# ls ./8yu
  ./8yu
  [root@localhost wjq]# ls -l ./8yu
  -rwxrw-r--. 1 wjq wjq 71 3月  27 20:39 ./8yu
  文件内容是否为空:
  -s file:若文件存在并且内容不为空,存在且内容不为空则为真;否则为假;
  时间戳测试:
  -N file:被测试文件自从上一次被修改之后,是否被修改过;
  逻辑测试运算符:
  ① !:逻辑非(NOT),他放在任何表达式前,是原来为真的表达式变为假,使原来为假的表达式变为真;
  ② -a:逻辑与(AND),他放在两个逻辑表达式之间,仅当两个都为真时,结果才为真;
  例:
  [ -f ./8yu -a -f ./aa ]
  ③ -o:逻辑或(OR),他放在两个逻辑表达式中间,其中只要有一个为真,结果才为真;
  例:
  [ -f ./8yu -o -f ./aa ]
  两种表达式等价:
  第一种表达式:
  [ -O /tmp/test ] && [ -s /tmp/test ]
  [ -O /tmp/test ] || [ -s /tmp/test ]
  第二种表达式:
  [ -O /tmp/test -a -s /tmp/test ]
  [ -O /tmp/test -o -s /tmp/test ]
  [ ! -O /tmp/test ]


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-556876-1-1.html 上篇帖子: 70个经典的 Shell 脚本面试问题 下篇帖子: shell之路--LAMP一键安装yum版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表