脚本参数交互与for语句循环
1、脚本参数交互
$n $1 $2 ...${10} ${11}...//传参,通过这些传参我们可以将相关的参数输入到脚本中去。
read命令实现脚本参数输入:
read语句可以多个参数同时输入,如果变量个数多于输入的数值,就把最后多余的数值赋值给最后一个变量。
例:read a b c
[root@lsl ~]# read a b c
1、-p可以指定输入提示文本
[root@lsl ~]# vi b.sh #!/bin/bash # read -p "请输入要查看的内容:" a echo $a
2、设置超时时间
[root@lsl ~]# vi b.sh #!/bin/bash # read -t 5 -p "请输入要查看的内容:" a //设置超时时间为5s,5s后自动退出 echo $a
此时未输入任何内容,5s后退出。
3、需要给read指定的变量,提供默认值
[$? -eq 0] && exit 0 || exit 1
练习:输入一个设备文件,输出这个设备文件的基本信息
#!/bin/bash # cat << EOF 请输入正确的信息如:sda |sdb|sda1 EOF read -t 5 -p "请输入设备文件名:" DiskName [ ! $? -eq 0 ] && echo "请输入正确的信息" && exit 1 if [ -b /dev/$DiskName ];then fdisk -l /dev/$DiskName exit 0 else echo "请正确书写" exit 2 fi
for语句循环:
1)使用场景:遍历
2)在python语言中,遍历的内容通过range(0,10,2) --2代表不长
3)在shell中,遍历的内容来源会有很多,如:{1..10}
4)命令,可以通过文件通配符来进行文件的遍历操作," $* ","$@ ",直接写入字符串;*
for 语句写法:
for 变量 in 所要遍历的内容;do
循环体
done
示例:顺序打印1-10
[root@lsl ~]# vim d.sh #!/bin/bash # for i in {1..10};do echo $i done
1.1 五种要遍历内容的方式:
字符遍历,例:
[root@lsl ~]# vim e.sh #!/bin/bash # for i in a b c d ;do echo $i done
数值的循环,例:
[root@lsl ~]# vim e.sh #!/bin/bash # for i in {2..10} ;do echo $i done
取命令后的运行结果:
[root@lsl ~]# vim f.sh #!/bin/bash # for i in `seq 1 2 9`;do echo $i done
练习:
1、1到100的偶数和;
[root@lsl ~]# vi b.sh #!/bin/bash # #!/bin/bash sum=0 for i in `seq 2 2 100` do let sum+=i done echo "sum=$sum"
2、找出user这个用户的所有文件,判断文件大小,并将大于1M的文件显示处理。
#!/bin/bash # for FileName in $(find / -user user1);do count = `wc -c $FileName | cut -d "" -f1` if [ $count -gt 1 ];then echo $FileName fi done
3、将/var/log下的以.log结尾的所有文件的行数统计出来
#!/bin/bash # for Line in /var/log/*.log;do wc -l $Line done
4、ping 网络中有哪些up的主机
#!/bin/bash # for i in {1..254};do ping -c 1 10.6.8.$i & > /dev/null if [ $? -eq 0 ];then echo "ip is up" else echo "ip is done" fi done
5、99乘法表
[root@lsl ~]# vi m.sh #!/bin/bash # for((i=1;i<10;i++)) do m=1 while((m<i)) do # 不换行输出 echo -ne " \t" ((m=m+1)) done for((j=i;j<10;j++)) do ((k=i*j)) echo -ne "$i*$j=$k\t" done echo done