star870126 发表于 2018-8-20 06:14:37

shell脚本(1)

  今天小编为大家讲的是shell脚本,这一块在我们Linux占了很大的分量,小编想了好久,还是觉的用练习题来讲述更具有说服力,小编会把每个解题的亮点与重点指出来。
  1、编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;并生成8位随机口令并存在一个文件中,初步提示改口令,显示添加的用户的id号等信息
  read -p "input user:   " user

  if>  echo "$user is exist,the info is`id $user`"
  else
  useradd $user&& echo"123"|passwd --stdin $user &&echo "useradd is successfuland passwd update,and the info is `id $user` "
  fi
  解题亮点:先用id进行判断比先判断用户是否存在更简洁,逆向思维。
  2、编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是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'> /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=$
  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 $);do
  echo -en " "
  done
  for k in $(seq $);do
  echo -en"*"
  done
  echo
  done
  重点在于: 空格数=总行数-当前行;*数=2n-1
  10、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大值和最小值
  > /app/a.txt
  j=1
  while [ $j -le 10 ];do
  echo $[$+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 [ $ -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道,剩下的待小编整理好一起讲讲

页: [1]
查看完整版本: shell脚本(1)