SHELL脚本练习

1、编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参 数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户 的id号等信息

    #!/bin/bash
    read -p "please input your username: " n
    useradd $n &> /dev/null
    if [ "$?" == "0" ]
            then
                    echo "user info:  `cat /etc/passwd | grep -E "\<^$n\>"`"
            else
            echo "user already exists"
    fi

2、编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的 是yes还是no,或是其它信息

    #!/bin/bash
    read -p "please input yes or no: " n
            case $n in
                    [Yy][Ee][sS]|[Yy])
                            echo "you input is yes"
                             ;;
                    [Nn][oO]|[Nn])
                            echo "you input is no"
                             ;;
                    *)
                     echo "you input is other info"
                              ;;
            esac

3、编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型 (普通,目录,链接,其它文件类型)

#!/bin/bash
read -p "please input file path: " n
if [ -f "$n" ]
        then
                echo "$n is 普通文件";
        elif [ -b "$n" ]
        then
                echo "$n is 块设备文件";
        elif [ -c "$n" ]
        then
                echo "$n is 字符设备文件";
        elif [ -h "$n" ]
        then
                echo "$n is 符号链接文件"
        elif [ -d "$n" ]
        then
                echo "$n is 目录文件";
        elif [ -p "$n" ]
        then
                echo "$n is 管道文件";
        elif [ -s "$n" ]
        then
                echo "$n is 套接字文件";
        else
                echo "$n unknown"
fi

4、编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数

    #!/bin/bash
    read -p "please input your charactor: " n
    m=`echo $n | sed -n -r 's/[0-9]//gp'`
    if [ ! "n$m" == "n" ]
            then
                    echo "please restart input"     
            elif [ "$n" == "0" ]
                    then
                            echo "your input is 0"
    else
            echo "your input is 正整数"
    fi

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

    #!/bin/bash
    for n in /var/*
       do
            if [ -f "$n" ]
            then
                    echo "$n is 普通文件";
            elif [ -b "$n" ]
            then
                    echo "$n is 块设备文件";
            elif [ -c "$n" ]
            then
                    echo "$n is 字符设备文件";
            elif [ -h "$n" ]
            then
                    echo "$n is 符号链接文件"
            elif [ -d "$n" ]
            then
                    echo "$n is 目录文件";
            elif [ -p "$n" ]
            then
                    echo "$n is 管道文件";
            elif [ -s "$n" ]
            then
                    echo "$n is 套接字文件";
            else
                    echo "$n unknown"
            fi
    done

6、添加10个用户user1-user10,密码为指定字符

#!/bin/bash
    for n in user{1..10}
            do
            useradd $n
            if [ "$?" = "0" ]
                    then
                    echo "12345678" | passwd --stdin $n
            else
                    echo "用户存在"
            fi
    done 

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

#!/bin/bash
for i in /etc/rc.d/rc3.d/[SK]* ;do
if [ $(basename $i | cut -c1) == "K" ] ;then
    echo "`basename $i` stop"
else
    echo "`basename $i` start"
fi
done

8、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和

    #!/bin/bash
    read -p "please input num: " n
    for (( i=1;i<="$n";i++ ))
            do
            sum=$[$sum+$i]
    done
    echo $sum

9、计算100以内所有能被3整除的整数之和

    #!/bin/bash
    n=0
    for i in {1..100};
    do
            if [ $[$i%3] -eq 0 ]
            then
            n=$[$n+$i]
            fi
    done
    echo "sum=$n"

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

    #!/bin/bash
    f=`mktemp /tmp/ping.XXXXXXX`
    read -p "please input you want to test: " ip
    n=`echo $ip | cut -d'.' -f1-3`
    for i in {1..255}
            do
            {       m=$n.$i
                    ping -w1 -c1 $m &> /dev/null && echo "$m is up!" && echo $m >> $f
            }&
            done

11、打印九九乘法表

    #!/bin/bash
    for i in {1..9}
            do
            for j in $(seq 1 $i) ;do
                 echo -ne "${j}x${i}=$[i*j]\t"
            done
            echo 
    done

12、在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字 母,如:1AbCdeFgH.html

    #!/bin/bash
    for i in {1..10}
    do
            n=`openssl rand -base64 64 | tr -dc '[a-zA-Z]' | head -c8`
            touch /testdir/$i$n.html
    done

13、打印等腰三角形

    #!/bin/bash
    until read -p "place input number " line ;do
      if [[ "$line" =~ [0-9]+ ]] ;then
          continue
      fi
    done
    for i in `seq 1 $line` ;do
         space=$[line-i]
         star=$[2*i-1]
            for j in `seq 1 $space` ; do
                 echo -e  " \c"
            done
            for k in `seq 1 $star`; do
                 clocr=$[RANDOM%7+31]
                 echo -e  "\e[1;${clocr}m*\e[0m\c"
            done
         echo
    done

14、编写脚本,求100以内所有正奇数之和

    #!/bin/bash
    n=0
    for i in {1..100};
    do
            if [ $[$i%2] -eq 1 ]
            then
            n=$[$n+$i]
            fi
    done
    echo "sum=$n"

15、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机 在线状态,并统计在线和离线主机各多少

    #!/bin/bash
    f=`mktemp /tmp/ping.XXXXXXX`
    read -p "please input you want to test: " ip
    n=`echo $ip | cut -d'.' -f1-3`
    for i in {1..255}
            do
            {       m=$n.$i
                    ping -w1 -c1 $m &> /dev/null && { echo "$m is up!"; echo $m >> $f; }
            }&
            done
    g=`cat "$f" | wc -l`
    j=$[255-$g]
    echo "up num: $g; down num: $j"

16、编写脚本,打印九九乘法表

    #!/bin/bash
    for i in {1..9}
            do
            for j in $(seq 1 $i) ;do
                 echo -ne "${j}x${i}=$[i*j]\t"
            done
            echo 
    done

17、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显 示其中的最大值和最小值

    #!/bin/bash
    let i=0,min=max=$RANDOM
    echo "$min "
    while [ $i -lt 9  ];do
        ran=$RANDOM
        echo "$ran "
        if [ $ran -ge $max ];then
            let max=ran
        fi
        if [ $ran -le $min ];then
            let min=ran
        fi
        let i+=1
    done
    echo "max is: $max ,min is: $min"

18、编写脚本,实现打印国际象棋棋盘

    #!/bin/bash
    let x=y=1
    h=8
    while [ $x -le $h ];do
        while [ $y -le $h ];do
            if [ $[(x+y)%2] -eq 0 ]  ;then
                echo -en "\033[47m  \033[0m"
            else
                echo -en "\033[40m  \033[0m"
            fi
        let y+=1
        done
        echo
    let x+=1,y=1
    done

19、后续六个字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机 执行命令: echo $RANDOM|md5sum|cut –c1-10 后的结果,请破解这些 字符串对应的RANDOM值

    #!/bin/bash
      ch=(efbaf275cd 4be9c40b8b 44b2395c46 f8c8873ce0 b902c16c8b ad865d2f63)
      for num in `seq 0 65535`;do
          chnum=`echo $num | md5sum | cut -c 1-10`
         for n in  ${ch[*]}; do
              if [ "$chnum" == "$n" ];then
                  echo "$n --> $num" 
              fi
          done
      done

20、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录, 则将登录时间和主机记录于日志/var/log/login.log中,并退出脚本

#!/bin/bash
username=cent
{
while true ;do
    if who | egrep "^\b$username\b" &> /dev/null ;then
        who | egrep "^\b$username\b" >> /var/log/login.log
        echo "$username 已经登录"
        echo "fuck ,go out my system" | write $username
    else
        echo "$username 已经下线"
    fi
    sleep 3
done
}

21、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出

#!bin/bash
lim=10
let key=$RANDOM%lim
read -p  "please input a number less than $lim: " num
until false;do
    if [ $num -le $lim &> /dev/null  ] && [ $num -ge 0  &> /dev/null ] ;then
        if [ $num -lt $key ];then
            read -p "is small,please input again: " num
        elif [ $num -gt $key ];then
            read -p "is big,please input again: " num
        else
            echo "you are right,you are very clever"
            break
        fi
    else
        read -p  "error,please input a number less than ten: " num
    fi
done

22、用文件名做为参数,统计所有参数文件的总行数

    #!/bin/bash
    let z=0
    while read -p "please input file path: " n
    do
            m=`cat "$n" | wc -l`
            z=$[$z+$m]
            echo "sum line: $z"
            if (("$z" > "5000"))
            then
                    echo "cache will be full"
                    break
            fi
    done

23、用二个以上的数字为参数,显示其中的最大值和最小值

    #!/bin/bash
    while read -p "please input two number: " n m
    do
            if (("$n" > "$m"))
                    then
                    max=$[$n]
                    min=$[$m]
                    echo "max=$max; min=$min"
            elif (("$n" < "$m"))
                    then
                    max=$[$m]
                    min=$[$n]
                    echo "max=$max; min=$min"       
            else
                    echo "two num equal"
            fi
done

转载于:https://blog.51cto.com/11010461/2113985

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值