Bootstrap

shell --Day 6

脚本参数交互与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

转载于:https://www.cnblogs.com/Blockblogs/p/11580493.html

;