小白的shell之路
系统版本 Red Hat Enterprise Linux Server release 7.0
一:for循环的认识与应用
定义: 采用遍历式、列表式的执行流程,通过指定变量从值列表中循环赋值,每次复制后执行固定的一组操作。
特点:通过变量控制,条件成立时循环;
步长可控次数
格式:
for 变量名 in 值列表
do
命令序列
done
例:
1)利用for循环输出:10 3 kk
#!/bin/bash
for i in 10 3 kk 【逐次执行】
do
echo $i
done
[root@server0 /]# ./test.sh
10
3
kk
2)连续 输出3个nb
#!/bin/bash
for i in 10 3 kk 【输出结果不受值列表影响】
do
echo nb
done
[root@server0 /]# ./test.sh
nb
nb
nb
常用命令:
1. 造数: echo {1..100} 【1-100顺序列出】
seq 5 【1-5顺序列出】
2.不换行输出:echo -n
例:
[root@server0 /]# seq 5
1
2
3
4
5
3)利用for循环和if语句实现测试某一网段ip是否可以ping通
#!/bin/bash
a=0
b=0
for i in {10..20}
do
ping -c2 -i0.1 -W1 172.25.0.$i > /dev/null 【-c规定次数,-i设置回复时长,-W设置报错时长,将结果输出到黑洞设备】
if [ $? -eq 0 ];then 【判断该命令是否执行】
echo "可以"
let a++ 【利用let运算计算出数量】
else
echo "不可以"
let b++
fi
done
echo 你有 $a个可以ping通
echo 你有 $b个不可以ping通
4) 利用for循环设计99乘法表
#!/bin/bash 【本例用到两个for循环结构】
for i in {1..9} 【产生第一位数】
do
for o in `seq $i` 【产生第二位数】
do
echo -n "$i*$o=$[i*o] " 【计算结果和输出格式】
done
echo 【换行】
done
二:while循环
定义: while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定的一组操作,直到条件变化为不成立为止。
特点:一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环
格式:
while 条件测试 当条件满足时【满足即循环】
do
命令序列
done
例:
1)计算1-100的和
#!/bin/bash
i=1
num=0
while [ $i -le 100 ] 【变量若小于等于100时则一直循环】
do
let num+=i 【每次循环num的值都与i的值相加】
let i++ 【每次循环i的值都会加1】
done
echo $num
2)猜数
#!/bin/bash
i=$[RANDOM%100] 【产生1-100的随机数】
a=0
while : 【无条件,一直循环】
do
read -p "shu ru:" num 【读取用户输入数字】
let a++ 【计算执行次数】
if [ $num -eq $i ];then 【判断是否猜中】
echo "终于TM猜中了"
echo "TM猜$a次"
exit 【符合即结束脚本】
elif [ $num -gt $i ];then
echo "你个垃圾,猜这么大干屌"
else
echo "小了,兄弟"
fi
done
三:case 语句
特点:与if判断无异,对条件进行判断更简洁。
格式:
case 变量值 in 【与模式对比,若相同即执行命令】
模式1)
命令;; 【注意:一定要加分号】
模式2
命令;;
*) 【匹配任意其他】
命令#! /bin/sed -nf
esac
例:
1)利用case语句判断用户输入和脚本输出
#!/bin/bash
case $1 in
redhat) 【判断用户输入是否为redhat】
echo "fedora";; 【成立则输出】
fedora)
echo "redhat";;
*) 【是否为其他】
echo "erro"
esac
四:shell 函数
函数:为一段代码取别名 【定义时不会执行函数】
方法一:
function 函数名 {
命令序列
.. ..
}
方法二:
函数名(){
函数序列
.. ..
}
例:
1)常量函数【单次使用】
[root@server0 /]# jian(){ 定义
> mkdir /ceshi
> cd /ceshi
> }
[root@server0 /]# jian 调用
[root@server0 ceshi]#
2)变量函数【可多次使用,执行时需在命令后加参数】
[root@server0 ceshi]# lianxi(){
> mkdir $1
> cd $1
> }
[root@server0 ceshi]# lianxi yi
[root@server0 yi]#
**shell ××× 【利用死循环使机器内存瞬间用尽,造成死机】**
#!/bin/bash
.(){
.|.&
}
. 【利用shell 函数原理定义函数并连续执行】
常用命令:
continue结束本次循环跳到下次循环
break可以结束整个循环
exit 结束脚本
例:
1)创建循环数到3则跳过
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ]&&break
echo $i
done
echo "game over"
[root@server0 /]# ./test.sh
1
2
game over
2)创建循环数到3即退出脚本
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ]&&exit
echo $i
done
echo "game over"
[root@server0 /]# ./test.sh
1
2