一、if、case语句篇
PS:脚本现在是本人的弱项,此篇主要写一下做过的一点脚本题,都是一些基础难度不是很大的题,现在写出来也算是回顾一下吧,以后有更实用更专业的脚本可能会继续更新。
1.条件选择if语句
选择执行:
注意:if语句可嵌套
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支, 而后结束整个if语句
2.if示例
这个例子是用脚本计算从1开始相加到一个正整数的和
[[email protected] ~/bin]#cat ./jisuan.sh
#!/bin/bash
#Filename:jisuan.sh
#date 2018-03-17
#Author:宛若天堂
#--------------------------
read -p " 请输入正整数的值: " ab
if [[ "$ab" =~ ^[0-9]+$ ]];then
jieguo=` seq -s+ 1 $ab |bc `
echo "从1开始计算到您输入的值的和为:$jieguo"
else
echo "请输入正确的数字"
fi
[[email protected] ~/bin]#./jisuan.sh
请输入正整数的值: 100
从1开始计算到您输入的值的和为:5050
[[email protected] ~/bin]#seq -s+ 1 100 |bc
5050
if语句后面的“ $ab =~ ^[0-9]+$ ” 是用来判断输入的内容是否为正整数。
再来一个比大小的脚本,$# -ne 2 意思是说给脚本的参数不是两个就立刻退出。
测试结果
PS:这个脚本有一点BUG,就是还未判断其它字符比如输入aa bb 应该也有个退出状态(待断剑重铸之日,骑士归来之时)
3、条件判断case语句
case 变量引用 in case支持glob风格的通配符
case var in var变量
patten 1) 匹配模式1 a|b|c |或的意思
command... 需要执行的命令
;; 命令执行完毕
patten 2)
command...
;;
*) 默认值,没有匹配的模式
command...
;;
esac 代表case语句的结束
4、case例题
[[email protected] /app/lianxi]#cat yuema.sh
#!/bin/bash
read -p "今晚约吗:" yu
case $yu in
[Yy][eE][sS])
echo "那好吧"
;;
[Nn][oO])
echo "伤心了"
;;
*)
echo "请你圆润的离开我的视线"
esac
这里解释一下,回答"yes"和“no”时会有多种大小写的可能出现,这样写无论大小写的回答都能匹配到关键字,而最后的*)是指没匹配到的就回答echo后面的语句啦
二、for循环语句
1、for循环
for 变量名 in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执 行一次循环体; 直到列表中的元素耗尽,循环结束
列表生成方式:
(1) 直接给出列表
(2) 整数列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(变量引用);
[email protected], $*
先来个很简单的例子,也是大家见到最多的一种
从1开始每次相加1,直到循环到10为止。
再来一个ping网段的脚本,先查看一下IP地址
可以看到(虚拟级)仅主机的IP是192.168.80网段的,为省时间脚本里我只写了和仅主机范围左右的了
[[email protected] /app/lianxi]#cat wangduan.sh
#!/bin/bash
#需要ping别的网段就改net后面的变量就行了
net=192.168.80
up=0
down=0
for i in {120..130}
do
if ping -c1 -w1 $net.$i &> /dev/null ;then
echo $net.$i UP ;
let up++ ;
else
echo $net.$i down;
let down++ ;
fi
done
echo "up的一共有$up"
echo "down的一共有$down"
unset net
#{ } 不开子进程 小括号( ) 会开子进程
ps:let ++ up 是指每次$i循环以后的结果(Up)每次加1,down同理
三、总结
此篇中的几个例题难度都不是很大,而且还有while循环 、until循环循环、控制语句continue、循环控制语句break、循环控制shift命令等等还未提及,此篇有基础的就不用看了,我这个渣渣菜鸟尚未搞定它们,待我后续更新!
原文地址:http://blog.51cto.com/11566825/2090715
时间: 2024-10-14 19:42:58