Linux·shell进阶一

2 篇文章 0 订阅


人们总是在意得不到的,从而忘记了已经拥有的

运算

expr 运算并输出结果

[root@zifeiyu opt]# expr 1 + 1 	# 注意:运算符号两边的空格必须写并且不能做浮点运算
2
[root@zifeiyu opt]# expr 2 '*' 3
6
[root@zifeiyu opt]# expr 2 \* 3
6

在这里插入图片描述

[ ] 或者 [ ]或者 []或者(( )) 运算

如果要直接看结果,可以配合echo命令

[root@zifeiyu opt]# cat aaa 
echo $[2-1]
echo $[2*3]
echo $[8/2]
echo $[5%2]
sum=20
sun=21
echo $[sum+sun]

[root@zifeiyu opt]# ./aaa 
1
6
4
1
41

在这里插入图片描述

let命令

不输出结果,专用于变量的创建或者变量的自增减

let a=1+1   //创建变量
变量的自增减:
常规写法       主流写法
let a=a+1       let a++     变量a加1
let a=a-1	      let a--      变量a减1
let a=a+10      let a+=10   变量a加10
let a=a-10      let a-=10    变量a减10
let a=a*2       let a*=2     变量a乘以2
let a=a/2       let a/=2    变量a除以2
let a=a%3      let a%=3    变量a除以3取余数

使用bc

bc 可以进行小数计算

[root@zifeiyu opt]# echo "10.0/3.0" | bc
3
[root@zifeiyu opt]# echo "scale=2;10.0/3.0" | bc
3.33

在这里插入图片描述

条件测试

可以赋予脚本智能判断

对字符串进行测试

语法格式

test  表达式   
[  表达式  ]
== 两边是否相等,相等时条件测试算成功
!= 两边是否不等,不相等时条件测试算成功
test a == a 	# 方式一:test ,使用常量判断,再用echo $?测试结果
test a == b  
[ a == a ] 		# 方式二:中括号,使用常量判断,再用echo $?测试结果
[ a == b ]   
a=abc
a=xyz
[ $a == $b ] 	# 使用变量判断两个变量的值是否相等
[ $a != $b ] 	# 使用变量判断两个变量的值是否不相等
[ "$c" == $b ] 	# 如果变量为空,有可能报错,加双引号可以避免
-z 
[ -z $a ] 		# 判断变量是否为空,为空时条件测试算成功
[ ! -z $a ] 	# 判断变量是否非空,非空时条件测试算成功

逻辑组合

语法格式

条件 &&  指令     条件成功才执行指令      
条件 ||   指令     条件失败才执行指令
[  root  ==  $USER  ] || exit 	# 判断当前用户名是否为root
如果判断失败,则执行exit
[  $USER  !=  root  ] && exit 	# 判断当前用户名是否不为root
如果判断成功,则执行exit

使用多个逻辑符号组合

A && B    A、B任务都成功算成功
A || B     A、B 任务有一个成功算成功
touch a b c
ls a  &&  ls b  &&  ls c 		# 结果是都显示
ls a  ||  ls b  ||  ls c 		# 结果是显示a 
ls a  &&  ls b  ||  ls c 		# 结果是显示a和b
ls a  ||  ls b  &&  ls c 		# 结果是显示a和c

[ root != $USER ]  &&  echo "非管理员不能执行该脚本"  && exit 	# 之前的语句可以改进成这个方式

文件

-e  判断文件是否存在,不关心类型
-f  判断文件是否存在,必须是普通文件
-d  判断文件是否存在,必须是目录
-r  判断当前用户对文件是否有读权限,对root无效
-w  判断当前用户对文件是否有写权限,对root无效
-x  判断当前用户对文件是否有x权限
[ -e abc ] 		# 判断当前目录下的abc是否存在,用echo $?查结果
[ -f /opt/abc ] 	# 判断opt下有没有abc这个普通文件
[ -d /opt/abc ] 	# 判断opt下有没有abc这个目录
mkdir  /opt/xyz
[ -d /opt/xyz ] 	# 判断opt下有没有xyz这个目录
[ -r /opt/abc ] 	# 判断当前用户对abc是否有读权限
[ -w /opt/abc ] 	# 判断当前用户对abc是否有写权限
[ -x /opt/abc ] 	# 判断当前用户对abc是否有x权限

if分支

单分支

语法格式

if 条件测试;then 	# 满足条件的话就执行下面指令
执行指令
fi
#!/bin/bash
if [ $UID -eq 0 ];then
echo "我是管理员"
echo ok
fi

双分支

语法格式

if 条件测试;then 	# 满足条件的话就执行下面指令
执行指令A 	# 指令可以是一条,也可以是多条
else 	# 否则,不满足条件的话就执行下面指令
执行指令B
fi
#!/bin/bash
if [ $1 == root ];then
echo "我是管理员"	
echo ok
else
echo "我不是管理员"
echo no
fi

在这里插入图片描述

ping 主机测试脚本

ping  -c  3  -i  0.2  -W  1  测试地址
-c 定义ping的次数   -i 定义ping的间隔时间()
-W  ping失败时多久反馈结果
#!/bin/bash
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null 	# 使用$1位置变量更方便
if [ $? -eq 0 ];then
echo "通了!"
else
echo "不通!"
fi

在这里插入图片描述

多分支

if 条件测试;then //满足条件的话就执行下面A指令
执行指令A //指令可以是一条,也可以是多条
elif 条件测试;then //满足条件的话就执行下面B指令
执行指令B
elif 条件测试;then //满足条件的话就执行下面C指令
执行指令C
else //否则,不满足条件的话就执行下面指令
执行指令
fi

#!/bin/bash
read -p “请输入月考成绩:” x
[ $x -lt 0 ] && echo “别闹” && exit
if [ $x -ge 90 ];then
echo “优秀!”
elif [ $x -ge 80 ];then
echo “良好!”
elif [ $x -ge 60 ];then
echo “及格。。”
else
echo “晚上没饭了!”
fi

循环,可以反复执行某任务

for循环,可以定义循环次数

for 变量名称 in 值1  值2  值3 。。。 	# 此处变量名可以自定义,通常习惯用i,值的多少决定了下面do与done之间的任务执行多少次,每个值之间有空格,这里是有3个值,所以就循环执行指令3次
do
任务
done

编写脚本,可以测试10.8.152.200~10.8.152.210

#!/bin/bash
for i in {200..210} 
do
ping -c 3 -i 0.2 -W 1 10.8.152.$i &> /dev/null
if [ $? -eq 0 ];then
echo "通了,ip是10.8.152.$a"
else
echo "不通"
fi
done

在这里插入图片描述

改良版,可以统计最终通了和不通的数量

#!/bin/bash
x=0
y=0
for a in {200..210} 
do
ping -c 3 -i 0.2 -W 1 10.8.152.$a &> /dev/null
if [ $? -eq 0 ];then
echo "通了,ip是10.8.152.$a"
let x++
else
echo "不通"
let y++
fi
done
echo "$x台通了,$y台不通"

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值