shell 3

for循环

for 变量名 in 值列表 #值列表,值和值之间用空格来隔开
do
命令序列
done
-------------------------
# vim /root/nb.sh

#!/bin/bash
for i in 1 2 3 #在这个脚本里,i只负责循环次数
do
echo NB
echo $i
done
------------------------------
# chmod +x /root/nb.sh
# /root/nb.sh
NB
1
NB
2
NB
3
----------------------------
#!/bin/bash
for i in {1..5}
do
echo NB
echo $i
done
---------------------------
# echo {1..5}
1 2 3 4 5

# echo {5..11}
5 6 7 8 9 10 11

# seq 5
1
2
3
4
5
----------------------------
# vim /root/touch.sh

#!/bin/bash
for i in {1..10000}
do
touch /opt/$i.txt
done
---------------------------
# vim /root/rm.sh

#!/bin/bash
for i in `seq 10000` #seq是一个命令
do
rm -rf /opt/$i.txt
done
---------------------------
#!/bin/bash

for i in {1254}
do
ping -c1 -W1 $i
if [ $? -eq 0 ];then
echo "$i is up"
else
echo "$i is down"
done

-------------------------
vim /root/ping.sh

#!/bin/bash
net=172.34.2
ping -c1 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
------------------------------
echo -n *
-n 指不换行
------------------------------
while循环 #只要对,就执行

while 条件测试
do
命令序列
done
---------------------------
vim /root/hehe.sh

#!/bin/bash
i=1
while [ $i -le 5 ] #要记住,这个没有then
do
echo $i #先显示$i
let i++ #再+
done

chmod +x /root/hehe.sh
/root/hehe.sh
会显示1到5


i=1
[ 1 <=5 ] 对 显示1,让i++=2
[ 2 <=5 ] 对 显示2,让i++=3
[ 3 <=5 ] 对 显示3,让i++=4
[ 4 <=5 ] 对 显示4,让i++=5
[ 5 <=5 ] 对 显示5,让i++=6
[ 6 <=5 ] 错 显示6,让i++=7
条件不成立,停止执行命令
-----------------------------
vim /root/hehe2.sh

#!/bin/bash
i=1
while [ $i -le 5 ]
do
let i++ #先+
echo $i #显示$i
done

chmod +x /root/hehe2.sh
/root/hehe.sh
会显示2到6
-------------------------------
专门写死循环的脚本
但是死循环一般很消耗cpu

while : #while后面写一个冒号,就是代表是死循环,永远执行下去
do
命令序列
done
--------------------------------
# mycd(){
> mkdir /aaa
> cd /aaa
> }
[root@server0 ~]# mycd
[root@server0 aaa]# mycd
mkdir: 无法创建目录"/aaa": 文件已存在
[root@server0 aaa]# unset mycd
[root@server0 aaa]# mycd
bash: mycd: 未找到命令...


[root@server0 aaa]# mycd(){
> mkdir $1
> cd $1
> }
[root@server0 aaa]# mycd /haha
[root@server0 haha]# ls
[root@server0 haha]# pwd
/haha
[root@server0 haha]# mycd /xixi
[root@server0 xixi]# ls
----------------------------
echo -e "\033[32mOK\033[0m"
OK #字体显示绿色

0x是样式
3x是字体色
4x是背景色
10x是高亮色
-------------------------------------
vim /root/cecho.sh

#!/bin/bash
cecho(){
echo -e "\033[$1m$2\033[0m"
}
cecho 31 OK
cecho 32 Error
cecho 33 nihao
cecho 34 OK
--------------------------------------
# cat /root/ping3.sh
#!/bin/bash
myping(){
ping -c2 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up" >> /root/up.txt
else
echo "$1 is down" >> /root/down.txt
fi
}
for i in {1..254}
do
myping 176.130.2.$i &
done
wait
---------------------------------------
ssh 172.25.0.11 "mkdir /qq"
---------------------------------------
continue结束"本次循环",进入下一次循环;break可以结束"整个循环";exit结束"整个脚本"

# cat /root/ssh.sh
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ] && continue
echo $i
done
echo over

# /root/ssh.sh
1
2
4
5
over
----------------------------------
# cat /root/ssh2.sh
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ] && break
echo $i
done
echo over

# /root/ssh2.sh
1
2
over
----------------------------------
# cat /root/ssh3.sh
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ] && exit
echo $i
done
echo over

# /root/ssh3.sh
1
2
----------------------------------
# cat /root/sum.sh
#!/bin/bash
sum=0
while :
do
read -p "请输入整数,输入0结束:" num
[ $num -eq 0 ] && break
let sum+=num
done
echo "$sum"
-----------------------------------
]# cat /root/num1.sh
#!/bin/bash
for i in {1..20}
do
x=$[i%6]
[ $x -ne 0 ] && continue
echo $[i*i]
done
---------------------------------
ssh 172.25.0.11 "mkdir /qq"

---------------------------------
基于case分支编写脚本
3.1 问题

本案例要求编写test.sh脚本,相关要求如下:
能使用redhat、fedora控制参数
控制参数通过位置变量$1传入
当用户输入redhat参数,脚本返回fedora
当用户输入fedora参数,脚本返回redhat
当用户输入其他参数,则提示错误信息
3.2 方案

case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认操作。
case分支的语法结构如下所示:
case 变量 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
.. ..
*)
默认命令序列
esac

猜你喜欢

转载自www.cnblogs.com/summer2/p/10788021.html