设为首页 收藏本站
查看: 701|回复: 0

四、shell编程练习题(1-20)

[复制链接]

尚未签到

发表于 2018-8-22 11:49:04 | 显示全部楼层 |阅读模式
  1、写一个脚本
  脚本可以接受一个以上的文件路径作为参数;
  显示每个文件所拥的行数;
  显示本次共对多少个文件执行了行数统计。
#!/bin/bash  
for file in $*; do
  
  lines=`wc -l $file | cut -d' ' -f1`
  
  echo "$file has $lines lines."
  
done
  
echo "$# files."
  

  
运行结果:
  
[root@mylinux test]# sh 1.sh /etc/inittab
  
/etc/inittab has 26 lines.
  
1 files.
  2、分别计算100以内所有偶数之和和奇数之和
#!/bin/bash  
eve=0
  
odd=0
  
for((i=1;i/dev/null ;then
  
  echo "$username 的id为`grep "^\" /etc//passwd | cut -d: -f3`"
  
else                              #由于51cto关键字限制,去掉一个'/'
  
  echo "无此用户"
  
fi
  

  
运行结果:
  
[root@mylinux test]# sh 9.sh
  
请输入用户名:mysql
  
mysql 的id为496
  
[root@mylinux test]# sh 9.sh
  
请输入用户名:123
  
无此用户
  10、通过命令行传递两个整数参数给脚本,脚本可以返回其大者
#!/bin/bash  
read -p "请输入两个整数:" a1 a2
  
if [ $a1 -gt $a2 ];then
  
  echo $a1
  
else
  
  echo $a2
  
fi
  

  
运行结果:
  
[root@mylinux test]# sh 10.sh
  
请输入两个整数:11 16
  
16
  
[root@mylinux test]# sh 10.sh
  
请输入两个整数:78 16
  
78
  11、通过命令行传递任意个整数给脚本,脚本可以返回其大者
#!/bin/bash  
declare -i num=0
  
for i in $@ ;do
  
if [ $i -gt $num ];then
  
   let num=i
  
fi
  
done
  
echo "最大数为:$num"
  

  
运行结果:
  
[root@mylinux test]# sh 11.sh 7978 991 31 3321 32
  
最大数为:7978
  
[root@mylinux test]# sh 11.sh 78 991 31 3321 32
  
最大数为:3321
  12、通过命令行给定一个文件路径,而后判断:如果此文件中存在空白行,则显示其空白行的总数;否则,则显示无空白行
#!/bin/bash  
if grep "^[[:space:]]*$" $1 &>/dev/null ;then
  
  echo "$1 has $(grep "^[[:space:]]*$" $1 | wc -l) blank lines."
  
else
  
  echo "No blank lines."
  
fi
  

  
运行结果:
  
[root@mylinux test]# sh 12.sh /etc//passwd     #由于51cto关键字限制,去掉一个'/'
  
No blank lines.
  
[root@mylinux test]# sh 12.sh /etc/inittab
  
No blank lines.
  
[root@mylinux test]# sh 12.sh /etc/rc.sysinit
  
/etc/rc.sysinit has 103 blank lines.
  13、传递一个参数给脚本:
  如果参数为quit,则显示说你要退出;
  如果参数为yes,则显示说你要继续;
  其它任意参数,则说无法识别。
#!/bin/bash  
case $1 in
  
quit|Q)
  
  echo "退出程序"
  
  ;;
  
yes|Y)
  
  echo "继续"
  
  ;;
  
*)
  
  echo "无法识别"
  
  ;;
  
esac
  
运行结果:
  
[root@mylinux test]# sh 13.sh
  
无法识别
  
[root@mylinux test]# sh 13.sh quit
  
退出程序
  
[root@mylinux test]# sh 13.sh yes
  
继续
  14、传递一个用户名给脚本:
  如果此用户的id号为0,则显示说这是管理员;
  如果此用户的id号大于等于500,则显示说这是普通用户
  否则,则说这是系统用户;
#!/bin/bash  
if id $1 &>/dev/null ;then
  
  userid=` grep "^\" /etc//passwd | cut -d: -f3 `  #由于51cto关键字限制,去掉一个'/'
  
  if [ $userid -eq 0 ];then
  
    echo "$1 是管理员."
  
  elif [ $userid -ge 500 ];then
  
    echo "$1 是普通用户."
  
  else
  
    echo "$1 是系统用户."
  
  fi
  
else
  
  echo “无此用户.”
  
fi
  

  
运行结果:
  
[root@mylinux test]# sh 14.sh mysql
  
mysql 是系统用户.
  
[root@mylinux test]#
  
[root@mylinux test]# sh 14.sh mysql
  
mysql 是系统用户.
  
[root@mylinux test]# sh 14.sh root
  
root 是管理员.
  
[root@mylinux test]# sh 14.sh nfsnobody
  
nfsnobody 是普通用户.
  
[root@mylinux test]# sh 14.sh nfsnobo
  
“无此用户.”
  15、给定一个用户,如果其shell为/bin/bash且其ID号大于等于500,则说这是一个可登录普通用户;否则,则显示其为非登录用户或管理员。
#!/bin/bash  
if id $1 &> /dev/null ;then
  
  userid=`grep "^\" /etc//passwd | cut -d: -f3`   #由于51cto关键字限制,去掉一个'/'
  
  usershell=`grep "^\" /etc//passwd | cut -d: -f7`#由于51cto关键字限制,去掉一个'/'
  
  if [ $userid -ge 500 ] && [ "$usershell"=="/bin/bash" ];then
  
    echo "$1 是可登录普通用户"
  
  else
  
    echo "$1 是非登陆用户或管理员"
  
  fi
  
else
  
  echo "无此用户."
  
fi
  

  
运行结果:
  
[root@mylinux test]# sh 15.sh root
  
root 是非登陆用户或管理员
  
[root@mylinux test]# sh 15.sh mysql
  
mysql 是非登陆用户或管理员
  
[root@mylinux test]# sh 15.sh nfsnobody
  
nfsnobody 是可登录普通用户
  
[root@mylinux test]# sh 15.sh nfsnobo
  
无此用户.
  16、写一个脚本,如果某用户不存在,就添加
#!/bin/bash  
if id $1 &> /dev/null ;then
  
  echo "$1 已存在."
  
else
  
  useradd $1
  
  echo "添加用户$1."
  
fi
  

  
运行结果:
  
[root@mylinux test]# sh 16.sh mysql
  
mysql 已存在.
  
[root@mylinux test]# sh 16.sh mylinux
  
添加用户mylinux.
  
[root@mylinux test]# tail -1 /etc//passwd  #由于51cto关键字限制,去掉一个'/'
  
mylinux:x:500:500::/home/mylinux:/bin/bash
  17、添加10个用户:tuser501-tuser510;如果用户不存在,才添加;如果存在,则显示已经有此用户;显示一共添加了多少个用户。
#!/bin/bash  
declare -i num=0
  
for i in {501..510};do
  
  if id tuser$i &> /dev/null ;then
  
    echo "tuser$i 已存在"
  
  else
  
    useradd tuser$i
  
        echo "添加用户 tuser$i"
  
        let num++
  
  fi
  
done
  
echo "添加$num 个用户."
  

  
运行结果:
  
[root@mylinux test]# sh 17.sh
  
添加用户 tuser501
  
添加用户 tuser502
  
添加用户 tuser503
  
添加用户 tuser504
  
添加用户 tuser505
  
添加用户 tuser506
  
添加用户 tuser507
  
添加用户 tuser508
  
添加用户 tuser509
  
添加用户 tuser510
  
添加10 个用户.
  
[root@mylinux test]# sh 17.sh
  
tuser501 已存在
  
tuser502 已存在
  
tuser503 已存在
  
tuser504 已存在
  
tuser505 已存在
  
tuser506 已存在
  
tuser507 已存在
  
tuser508 已存在
  
tuser509 已存在
  
tuser510 已存在
  
添加0 个用户.
  18、添加10个用户:tuser601-tuser610;如果用户不存在,才添加,并以绿色显示添加成功;如果存在,则以红色显示已经有此用户;显示一共添加了多少个用户。
#!/bin/bash  
#
  
declare -i count=0
  
for i in {601..610}; do
  
  if id tuser$i &> /dev/null; then
  
    echo -e "\033[31mtuser$i\033[0m exists."
  
  else
  
        useradd tuser$i
  
        echo -e "add user \033[32mtuser$i\033[0m successfully."
  
        let count++
  
  fi
  
done
  
echo "Total add $count users."
  
运行结果:
  
[root@mylinux test]# sh 18.sh
  
add user tuser601 successfully.
  
add user tuser602 successfully.
  
add user tuser603 successfully.
  
add user tuser604 successfully.
  
add user tuser605 successfully.
  
add user tuser606 successfully.
  
add user tuser607 successfully.
  
add user tuser608 successfully.
  
add user tuser609 successfully.
  
add user tuser610 successfully.
  
Total add 10 users.
  
[root@mylinux test]# sh 18.sh
  
tuser601 exists.
  
tuser602 exists.
  
tuser603 exists.
  
tuser604 exists.
  
tuser605 exists.
  
tuser606 exists.
  
tuser607 exists.
  
tuser608 exists.
  
tuser609 exists.
  
tuser610 exists.
  
Total add 0 users.
  19、传递用户名给脚本
  判断此用户的shell是否为/bin/bash,如果是,则显示此用户为basher
  否则,则显示此用户为非basher
#!/bin/bash  
#
  
userShell=`grep "^$1\>" /etc//passwd | cut -d: -f7`  #由于51cto关键字限制,去掉一个'/'
  
if [ "$userShell" == '/bin/bash' ]; then
  
  echo "basher"
  
else
  
  echo "not basher"
  
fi
  
运行结果:
  
[root@mylinux test]# sh 19.sh mysql
  
not basher
  
[root@mylinux test]# sh 19.sh mylinux
  
basher
  20、给定一个文件路径
  判断此文件是否存在;不存在,则说明文件不存,并直接结束脚本;
  如果文件是否普通文件,则显示为“regular file”;
  如果文件是目录,则显示为“directory”;
  如果文件是链接文件,则显示为“Symbolic file";
  否则,则显示为“unknown type.”
#!/bin/bash  
if [ ! -e $1 ];then
  
  echo "file not exit ."
  
  exit 5
  
fi
  
if [ -L $1 ];then
  
  echo "Symbolic file."
  
elif [ -d $1 ];then
  
  echo "directory."
  
elif [-f $1 ];then
  
  echo "regular file."
  
else
  
  echo "unknown type."
  
fi
  
运行结果:
  
[root@mylinux test]# sh 20.sh /etc/
  
directory.
  
[root@mylinux test]# sh 20.sh /etc/rc.d/rc1.d/K92iptables
  
Symbolic file.
  
[root@mylinux test]# sh 20.sh 12312
  
file not exit .



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-555100-1-1.html 上篇帖子: shell截取字符串的常用方法 下篇帖子: Shell脚本 自动安装nrpe-nightmare
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表