今天小编为大家讲的是shell脚本,这一块在我们Linux占了很大的分量,小编想了好久,还是觉的用练习题来讲述更具有说服力,小编会把每个解题的亮点与重点指出来。

1、编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;并生成8位随机口令并存在一个文件中,初步提示改口令,显示添加的用户的id号等信息

 read -p "input user:   "  user                                                                          

 if id $user &>/dev/null ;then

       echo "$user is exist,the info is `id $user`"

  else

   useradd $user&& echo "123"|passwd --stdin $user &&echo "useradd is successful and passwd update,and the info is `id $user` "

 fi

解题亮点:先用id进行判断比先判断用户是否存在更简洁,逆向思维。

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

  read -p "yuema ?yes or no:  " ANS

 ans=`echo $ANS|tr 'A-Z' 'a-z' `

  case $ans in

 y|yes)

     echo "see you Now."

      ;;

  n|no)

      echo "bye bye"

      ;;

 *)

      echo  "error input"

      ;;

 esac 

解题亮点:ans=`echo $ANS|tr 'A-Z' 'a-z' `  用tr进行大写转换成小写,这会让下面的case命令的选项更简洁

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

 read -p "input file: " file1

  n=` ls -l $file1|cut -c1 `                                                                               

  case $n in

  -)

    echo "this is 常规文件"

     ;;

  d)

    echo "this is 目录文件"

     ;;

 c)

    echo "this is 字符设备文件"

     ;;

  b)

    echo "this is 块设备文件"

    ;;

 l)

    echo "this is 符号链接文件"

   ;;

 p)

    echo "this is 管道文件"

   ;;

  s)

    echo "this is 套接字文件"

    ;;

  *)

     echo "input wrong"

     ;;

  esac

此题重点在于把文件类型的记忆


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

  read -p "input int: " num

     echo  $num|grep "[^0-9]" && echo "是非正整数"|| echo "$num 是个正整数"

此题重点:利用grep对数字进行过滤(主要过滤正负号和点)

5、添加10个用户user1-user10,密码为8位随机字符

  >/app/userinfo.txt                                                                                      

  for i in {1..10};do

      pwd=`tr -dc 'A-Za-z0-9'</dev/urandom|head -c8`

      useradd user$i

     echo user$i:$pwd|chpasswd

     echo "user$i user$i$pwd" >> /app/userinfo.txt

      done

重点在于怎么把密码写在脚本里,这个在以后的文章也会讲


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

  for i in `ls /etc/rc.d/rc3.d` ;do

    n1=`echo $i|cut -c1`

     case $n1 in

         K)

             echo -e ${i}stop

             ;;

        S)

             echo -e ${i}start                                                                           

            ;;

         *)

              echo "unkown"

              ;;

     esac

   done

重点在于${i}stop中的{},忘记的话,特别容易出错

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

 read -p "input n: " n

 sum=0

 for i in $(seq $n);do

   sum=$[sum + i]                                                                                       

  done

   echo " 1 $n 的和为: $sum"

重点在于$n不能用于{  }里,这就让for循环容易出错,但是,我们可以用seq代替

8、打印九九乘法表

for i in {1..9} ; do

        for j in `seq 1 $i`; do

            echo -n "$i*$j=$[ i*j ]  "

        done

echo

done

重点同上for j in `seq 1 $i`

9、打印等腰三角形

  read -p "input n: " n

  for i in $(seq $n);do

    for j in $(seq $[n-i]);do

        echo -en " "

   done

    for k in $(seq $[2*i-1]);do                                                                           

         echo -en  "*"

    done

    echo

  done

重点在于: 空格数=总行数-当前行;*数=2n-1

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

  > /app/a.txt

  j=1

 while [ $j -le 10 ];do

    echo $[$[RANDOM%9]+1] |tee -a /app/a.txt

     let j++

  done

 min=`sort -n /app/a.txt| head -1`

  max=`sort -n /app/a.txt|tail -1`                                                                        

 echo "min: " $min

 echo "max: " $max

亮点在于:用tee把随机数重定向到a.txt中,这样对它进行排序首行就是最小值,尾行就是最大值,会是代码简洁


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

y="\033[1;43m  \033[0m"

  R="\033[1;41m  \033[0m"

  for i in {1..8};do

      if [ $[i%2] -eq 0 ];then

          for j in {1..4};do

          echo -en "$y$R"

           done

      else

         for j in {1..4};do

           echo -en "$R$y"                                                                                

          done

      fi

    echo   

  done

用变量y R对颜色进行定义会使下面的调用更具有调理性

好了今天小编先说这11道,剩下的待小编整理好一起讲讲