Bash   发布时间:2022-05-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了shell:数值运算、条件测试、if判断大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

bash-completion包:支持tab补齐@H_450_1@

数值运算:整数运算、小数运算 一、整数运算 1、expr expr A + B,A和B之间要空格,否则直接显示A+B expr A - B expr A * B #乘法*需要采用转义*,避免被作为sHell通配符 expr A / B :只能屏蔽一个字符e.g: [root@sHell ~]# a=24 [root@sHell ~]# echo $a $a [root@sHell ~]# echo $a 24 [root@sHell ~]# echo $a$b $a [root@sHell ~]# echo $a$b $a$b@H_450_1@

2、$[]或$(()) 举例: [root@sHell ~]# echo $[10*3] 30 [root@sHell ~]# echo $[10/3] 3 [root@sHell ~]# echo $[10+3] 13 [root@sHell ~]# echo $[10-3] 7 [root@sHell ~]# echo $[10%3] 1 [root@sHell ~]# x=3 [root@sHell ~]# y=5 [root@sHell ~]# echo $[x+y] 8@H_450_1@

可以一行进行多个运算 [root@sHell ~]# x=8 [root@sHell ~]# echo $[x+8],$[x*8] [root@sHell ~]# 16,64@H_450_1@

3、let运算 不回显结果 [root@sHell ~]# x=9 [root@sHell ~]# let x=x+8 [root@sHell ~]# echo $x 17@H_450_1@

4、特殊用法: i=n let i++ ---->i=n+1 let i-- ---->i=n-1 let i+=3 --->i=n+3 let i-=2 --->i=n-2 let i*=2 --->i=n2 let i/=2 --->i=n/2 举例: [root@sHell ~]# i=24 [root@sHell ~]# let i++ [root@sHell ~]# echo $i 25 [root@sHell ~]# let i+=3 [root@sHell ~]# echo $i 28 [root@sHell ~]# let i-=1 [root@sHell ~]# echo $i 27 [root@sHell ~]# let i=2 [root@sHell ~]# echo $i 54 [root@sHell ~]# let i/=2 [root@sHell ~]# echo $i 27@H_450_1@

二、小数运算 scale=n 控制小数点位数为n位 举例: [root@sHell ~]# bc scale=5 #取小数点后保留5位 24/5.2555 #24除以5.2555 4.56659 #结果为4.56659@H_450_1@

bc可做数值大小比较>、<、==、>=、<=、!=,真为1,假为0 举例: [root@sHell ~]# echo "1>2" | bc [root@sHell ~]# 0 [root@sHell ~]# echo "2>1" | bc [root@sHell ~]# 1 [root@sHell ~]# A=12.5;B=24.8 [root@sHell ~]# echo "$A>$B" | bc 0@H_450_1@

bc非交互式运算 [root@sHell ~]# echo 'scale=4;12.34*56.789;5/3' | bc #一行可以有多个命令,用分号;隔开! 700.7762 1.666@H_450_1@

三、条件测试操作 1、字符串比较:==(判断两个字符串是否相当)、-z(字符串的值是否为空),-n(字符串的值是否不为空,相当于! -z) 举例: 判断当前用户是否为root 当root用户执行时: [root@sHell ~]# [ $USER == "root" ] [root@sHell ~]# echo $? [root@sHell ~]# 0 当普通用户执行时: [kobe@sHell ~]$ [ $USER == "root" ] [kobe@sHell ~]$ echo $? [kobe@sHell ~]$ 1@H_450_1@

且&&,或|| 一行中有多个命令,A命令和B命令 A;B #执行A,执行B A&&B #执行A,仅当A成功才执行B A||B #执行A,仅当A失败才执行B 举例: [ a == a ] && echo "yes" || echo "no" yes [ a == b ] && echo "yes" || echo "no" no@H_450_1@

[root@sHell ~]# [ a == a ]
[root@sHell ~]# echo $? [root@sHell ~]# 0 [root@sHell ~]# [ -z $A ] #判断A变量是否为空 [root@sHell ~]# echo $? #查看0为真,非0为假@H_450_1@

[root@sHell ~]# a="abc" ; b="" #定义变量a的值为abc,b的值为空,注意:""里如果有空格也算不为空 [root@sHell ~]# [ -z "$a" ] && echo "空值" || echo "非空值" 非空值 [root@sHell ~]# [ -z $b ] && echo "空值" || echo "非空值" 空值@H_450_1@

2、整数比较(不支持小数比较) -eq(等于)、-ne(不相等)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于) 举例: [root@sHell ~]# x=20 [root@sHell ~]# [ $x -eq 20 ] && echo "相等" || echo "不相等" 相等 [root@sHell ~]# [ $x -eq 30 ] && echo "相等" || echo "不相等" 不相等@H_450_1@

提取当前登录此虚拟机的用户数,比较是否超过4 [root@sHell ~]# who | wc -l 3 #统计用户数为3 [root@sHell ~]# N=$(who | wc -l) #将统计的值赋给N [root@sHell ~]# [ $N --gt 4 ] && echo "超过了" || echo "没超过" 没超过@H_450_1@

也可简化为: [root@sHell ~]# [ $(who | wc -l) -gt 4 ] && echo "超过了" || echo "没超过"@H_450_1@

3、文件、目录判断 -e #判断是否存在(不管是文件还是目录) -f #判断是否存在文件 -d #判断是否存在目录 -r #判断是否有r权限 -w #判断是否有w权限 -x #判断是否有x权限@H_450_1@

例: [root@sHell ~]# [ -e "/usr/src" ] && echo 存在 || echo 不存在 存在@H_450_1@

判断对象是否为目录 -d,是否不为目录 ! -d [root@sHell ~]# [ -d "/usr/src/" ] && echo "是目录" || echo "不是目录" 是目录 [root@sHell ~]# [ -d "/etc/fstab" ] && echo "是目录" || echo "不是目录" 不是目录 [root@sHell ~]# [ -d "/home/nooby" ] && echo "是目录" || echo "不是目录" 不是目录@H_450_1@

判断对象是否有-r、-w、-x权限 注意:r和w对root用户判断无效,无论是否设置权限,root都可读或写 举例: [root@sHell ~]# cp install.log /tmp/t.txt #复制一个文件做测试 [root@sHell ~]# chmod -r /tmp/t.txt #去掉所有的r权限 [root@sHell ~]# [ -r "/tmp/t.txt" ] && echo "可读" || echo "不可读" #root仍然可读 可读@H_450_1@

切换为普通用户时: [kobe@sHell ~]$ [ -r "/tmp/t.txt" ] && echo "可读" || echo "不可读" 不可读@H_450_1@

普通用户只对自己拥有r权限的对象,-r测试才成立 [kobe@sHell ~]$ ls -l .bashrc -rw-r--r-- 1 kobe kobe 124 09-24 16:44 .bashrc [kobe@sHell ~]$ [ -r ".bashrc" ] && echo "可读" || echo "不可读" 可读@H_450_1@

-x权限:取决于文件本身,root或普通用户都适用 [root@sHell ~]# chmod 644 /tmp/t.txt #设置无x权限 [root@sHell ~]# ls -l /tmp/t.txt -rw-r--r-- 1 root root 33139 12-11 10:52 /tmp/t.txt [root@sHell ~]# [ -x "/tmp/t.txt" ] && echo "可执行" || echo "不可执行" 不可执行 [root@sHell ~]# chmod +x /tmp/t.txt #添加x权限 [root@sHell ~]# [ -x "/tmp/t.txt" ] && echo "可执行" || echo "不可执行" 可执行@H_450_1@

条件组合应用: 当前用户为root,且位于/root目录下 [root@sHell ~]# [ $USER == "root" ]&&[ $PWD == "/root"] [root@sHell ~]# [ $? -eq 0 ]&& echo "YES" YES@H_450_1@

[root@sHell ~]# [ ! -d "/xx" ]&& mkdir /xx #判断是否没有目录/xx,是就创建
[root@sHell ~]# mount /dev/cdrom /xx #挂载 或 [root@sHell ~]# [ -d "/xx" ]|| mkdir /xx #判断是否有目录/xx,没有就创建 [root@sHell ~]# mount /dev/cdrom /xx 或 [root@sHell ~]# [ -d "/xx" ]&& mount /dev/cdrom /xx@H_450_1@

每分钟检测当前计算机登录的用户数量 若数量大于2,则发送邮件报警 先写好脚本: #!/bin/bash user=$(who | wc -l) [ $user -ge 2 ] && mail -s "登陆用户过多" root < /root/用户报警.txt@H_450_1@

crontab -e -u root */1 * * * * bash 脚本名@H_450_1@

if判断语句@H_450_1@

1、单分支if(仅判断对) if [ 判断 ];then 命令 fi@H_450_1@

if [ 判断 ];then 成功 else 失败 fi@H_450_1@

例: 脚本: #!/bin/bash read -p '请输入您的IP:' ip ping -c2 $ip >&/dev/null #-c2是只ping2个包,-i0.1(缩短发送每个包的间隔时间为0.1秒),-W2(等待反馈是否ping通的超时时间2秒) if [ $? -eq 0 ];then echo 通了! else echo 不通! fi@H_450_1@

2、多分支if if [ 判断1 ];then 命令 elif [ 判断2 ];then 命令 ... ... else 命令 fi@H_450_1@

例: $RANDOM(随机数) $[RANDOM%10+1] 求余(因为余数不可能大于除数)设定随机数的范围1-10,不能用%11,因为有可能全部除尽余数为0 #!/bin/bash x=$[RANDOM%10+1] read -p "我有个1-10的随机数,你猜:" cai if [ $cai -eq $x ];then echo 恭喜你,猜对了! exit #必须要有!不然猜对了还会继续猜下去 elif [ $cai -gt $x ];then echo 太大了 else echo 太小了 fi 增加概率可以从read开始到最后多复制几遍@H_450_1@

大佬总结

以上是大佬教程为你收集整理的shell:数值运算、条件测试、if判断全部内容,希望文章能够帮你解决shell:数值运算、条件测试、if判断所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: