shell脚本(1)
今天小编为大家讲的是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,提示用户输入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'</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=" 33[1;43m 33[0m" R=" 33[1;41m 33[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道,剩下的待小编整理好一起讲讲 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |