目录
判断语句
linux中判断使用if来实现。具体语法如下:
if 条件 then 成立子语句 fi
初试,单分支
我们可以写一个最简单的判断语句进行测试。
新建一个if.sh
#!/bin/bash if [ 3 -lt 5 ] then echo "yes" else echo "no" fi
-lt表示小于,-gt表示大于,-eq表示等于。linux中对于缩进没有严格限制,我们缩进4个字符只是为了自己阅读方便。
注意修改其权限
chomd +x if.sh
运行一下试试
进阶,多分枝
输入一个数,让其和10进行比较。
#!/bin/bash read -p "please input a num:" NUM if [ $NUM -lt 10 ] then echo "lt" elif [ $NUM -eq 10 ] echo "eq" else echo "gt" fi
实战:内网单台主机存活测试
ping -c2 -i0.2 -W2 192.168.1.1 &> /home/result.txt
这条命令表示ping 192.168.1.1时只发送两个测试包,间隔0.2s,对于响应包最多等待2s,然后将输出结果不显示在屏幕上,而是保存在/home/result.txt中。
根据这条命令写一个带有条件判断语句的脚本pctest.sh。
#!/bin/bash read -p "please input the ip:" IP if `ping -c2 -i0.2 -W2 $IP &>/home/result.txt` then echo "yes" else echo "no" fi
循环语句
for循环
for循环主要根据循环次数进行循环。
for 变量 in 取值列表 do 子语句 done
写一个for循环脚本forxunhuan.sh
#!/bin/bash for i in {1..10} do echo "hello" done
输出从1到10
#! /bin/bash for i in {1..10} do echo $i
还有一种方法
直接使用echo {1..10}
while循环
while循环主要根据循环条件进行循环。
while 条件 do 子语句 done
#!/bin/bash NUM=0 while [ $NUM -lt 10 ] do echo $NUM let NUM++ done
实战:内网多台主机存活测试
for循环方法
#!/bin/bash for IP in {1..254} do if `ping -c2 -i0.2 -W2 192.168.1.$IP &> /home/result` then echo -e "192.168.1.$IP is \033[32mup\033[0m" else echo -e "192.168.1.$IP is \033[31mdown\033[0m" fi done
while循环方法
#!/bin/bash IP=1 while [ $IP -lt 254 ] do if `ping -c2 -i0.2 -W2 192.168.1.$IP &> /home/result` then echo -e "192.168.1.$IP is \033[32mup\033[0m" else echo -e "192.168.1.$IP is \033[31mdown\033[0m" fi let IP++ done
注意
\033[表示颜色渲染 32m是绿色渲染 31m是红色渲染 0m是颜色渲染停止
case语句
case 变量 in 模式1) 子语句 ;; *) 子语句 esac
case $1 in redhat) echo "centos" ;; centos) echo "redhat" ;; *) echo "Useage $0 {redhat|centos}" esac
函数
将一部分代码保存在变量中。
设计一个函数A,运行A的时候屏幕输出ok
[root@bogon home]# A(){ > echo ok > echo yes > return 0 > }
echo $?//查看上一次函数执行后的成果,即返回值
配合case语句使用
[root@bogon home]# cat case.sh CASE1(){ echo this is case1 return 0 } CASE2(){ echo this is case2 return 0 } case $1 in c1) CASE1 ;; c2) CASE2 ;; esac
这其实就是linux中带有后缀命令的基本格式
比如我们输入
service httpd status
如果输入
service httpd xxx
说明后缀是确定的。
实战:给nginx添加启动停止脚本
我们之前学习过nginx,知道nginx的启动和停止是没有service服务支持的,需要我们手动开始和停止
我们可以通过case和函数的配合使用脚本来进行。
[root@bogon home]# cat nginxd.sh #!/bin/bash nginx=/usr/local/nginx/sbin/nginx start(){ echo "nginx starting ..... [ok]" $nginx } stop(){ echo "nginx stopping ..... [ok]" $nginx -s stop } status(){ if `ss -anptl | grep nginx > /home/result` then echo "nginx starting ...." else echo "nginx stop ...." fi } case $1 in start) start ;; stop) stop ;; status) status ;; esac
欢迎关注博主的公众号:旁骛OtherThing,不定期更新技术干货。