加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell脚本(1)

发布时间:2020-12-15 16:19:00 所属栏目:安全 来源:网络整理
导读:今天小编为大家讲的是shell脚本,这一块在我们Linux占了很大的分量,小编想了好久,还是觉的用练习题来讲述更具有说服力,小编会把每个解题的亮点与重点指出来。 1 、编写脚本 /root/bin/createuser.sh ,实现如下功能:使用一个用户名做为参数,如果指定参

今天小编为大家讲的是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="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道,剩下的待小编整理好一起讲讲

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读