练习:用for实现

  1、判断/var/目录下所有文件的类型


 

#!/bin/bash
 
 #Version:1.0
 #Create time:2016-08-15 11:59:26
 #Description:1、判断/var/目录下所有文件的类型
 FILE=`ls /var/`
 for I in $FILE
 do  
     if [ -f /var/$I ] ; then
         echo "$I is a commom file"
     elif [ -d /var/$I ] ; then
         echo "$I is a document file"
     else
         echo "$I is a other file"
     fi
 done
 unset FILE

2、添加10个用户user1-user10,密码同用户名

 

#!/bin/bash
  
  #Version:1.0
  #Create time:2016-08-15 12:23:52
  #Description:2、添加10个用户user1-user10,密码同用户名
  for I in `seq 10`
  do
      useradd user$I &> /dev/null
      echo "user$I" |passwd --stdin user$I &> /dev/null
      echo "user$I add success"
  done

3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;

“K34filename stop”
“S66filename start”
 #!/bin/bash
 
 #Version:1.0
 #Create time:2016-08-15 12:38:21
 #Description:3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的>    文件输出为文件名加start;
 #“K34filename stop”
 #“S66filename start”
 FILE=`ls /etc/rc.d/rc3.d`
 for I in $FILE
 do
     find /etc/rc.d/rc3.d -name "S*" -exec mv {} "{} start" \; &> /dev/null
     find /etc/rc.d/rc3.d -name "K*" -exec mv {} "{} stop" \; &> /dev/null
 done

4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和

 

#!/bin/bash
 
 #Version:1.0
 #Create time:2016-08-15 13:51:02
 #Description:写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
 let SUM=0
 read -p "input num: " NUM
 expr $NUM + 0 &> /dev/null
 [ $? -ne 0 ] && echo "please input digitnum" && exit 100
 [ $NUM -le 0 ] && echo "input the right num" && exit 99
 for I in `seq $NUM`
 do
     SUM=$(($SUM+$I))
 done
 echo "the sum is $SUM"
 unset SUM
 unset NUM

5、写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

#!/bin/bash
#Version:1.0
#Create time:2016-08-15 14:01:08
#Description:写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
read -p "input a IP address: " IP
echo "$IP" |grep -qE '^((\<[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>)\.){3}(\<[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5    ]\>)$'
[ $? -ne 0 ] && echo "please input the right IP" && exit 100
IP1=`echo "$IP"|cut -d. -f1-3`
for I in `seq 255`
do
    ping -c1 -W1 "$IP1.$I" &> /dev/num && echo "$IP.$I is up"
done
unset IP
unset IP1

6、打印九九乘法表

#!/bin/bash
#Version:1.0
#Create time:2016-08-15 14:25:55
#Description:打印九九乘法表
for I in `seq 9`
do
    for J in `seq $I`
    do
        echo -ne "${I}X$J=$(($I*$J))\t"
    done
    echo
done

  

  练习:用while实现

1、求100以内所有正整数之和
#!/bin/bash
#Version:1.0
#Create time:2016-08-15 14:36:00
#Description:求100以内所有正整数之和
let SUM=0
let NUM=1
while [ $NUM -le 100 ] 
do
    SUM=$(($SUM+$NUM))
    NUM=$(($NUM+1))
done
echo "1+2+...+100=$SUM"


2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。

#!/bin/bash
#Version:1.0
#Create time:2016-08-15 14:43:24
#Description:通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
let NUM=1
COUNT1=0
COUNT2=0
while [ $NUM -le 254 ]
do
    ping -c1 -W1 "172.16.250.$NUM" &> /dev/null
    if [ $? -eq 0 ];then
        echo "172.16.150.$NUM is up"
        COUNT1=$(($count1+1))
    else
        COUNT2=$(($COUNT2+1))
    fi
    NUM=$(($NUM+1))
done
    echo "total $COUNT1 is up,$COUNT2 is down"
unset NUM
unset COUNT1
unset COUNT2

3、打印九九乘法表【思路:第n行执行n次】

#!/bin/bash
#Version:1.0
#Create time:2016-08-15 18:32:03
#Description:打印九九乘法表
NUM=1
while [ $NUM -le 9 ]
do
    for I in `seq $NUM`
    do
        echo -ne "${NUM}X$I=$(($NUM*$I))\t"
    done
    NUM=$(($NUM+1))
    echo
done
unset NUM

         

4、利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者[【思路:循环前先赋值最小值,循环次数减一】

#!/bin/bash
#Version:1.0
#Create time:2016-08-15 18:40:10
#Description:利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
let I=1
let MAX=0
let MIN=$RANDOM
echo $MIN
while [ $I -le 9 ]
do
    let NUM=$RANDOM
    echo "$NUM"
    if [ $NUM -le $MAX ];then
        if [ $NUM -le $MIN ];then
            MIN=$NUM
        fi
    else
        MAX=$NUM
    fi
    I=$(($I+1))
done
echo "the max num is $MAX"
echo "the min num is $MIN"
unset I
unset MAX
unset MIN
unset NUM


5、打印国际象棋棋盘【思路:黑色是行数和列数相等或者行数和列数都是奇数,白色是行数和列数是一奇一偶】

#!/bin/bash
#Version:1.0
#Create time:2016-08-16 14:40:00
#Description:打印国际象棋棋盘
let I=1
while [ $I -le 8 ]
do
    for J in `seq 8`
    do
        [ $((($I+$J)%2)) -eq 0 ] && echo -ne "\033[47m  \033[0m" || echo -ne "\033[40m  \033[0m"
    done
    I=$(($I+1))
    echo
done