2014马哥Linux0218-1字符测试与生成交互式选项表的脚本代码

0218课里,先是一个简单的小程序,注意字符测试的使用,建议所有被测试的字符都要加引号,而在字符测试匹配模式(也可以使正则表达式)的时候,需要用双中括号,题目如下:

练习:判定所有用户是否拥有可登陆shell

#!/bin/bash

for userName in `cut -d: -f1 /etc/passwd`;do

if [[ `grep "^$userName\>" /etc/passwd | cut -d: -f7` =~ sh$ ]]; then

echo "login user: $userName"

else

echo "nologin user: $userName"

fi

done

上题中,比较诡异的是,判定的前半部分可以用grep命令引用,还不需要加双引号,神奇!

练习:写一个脚本

1、让用户交互式输入一个用户名,先判定用户是否存在,不存在,则以7为退出码;

2、判断用户的shell是否为/bin/bash,如果是,则显示为"Bash User",退出码为0;

否则,则显示为"Not Bash User.",退出码为1。

read -p "please input usename :" username

if ! grep "^$username/>" /etc/passwd &> /dev/null;then

exit 7

elif

[[ `grep ^$username/> /etc/passwd |cut -d:-f7` =~ /bin/shell ]];then

echo "bash user"

exit 0

else

echo "not bash user"

exit 1

以上这题,取自学友笔记

练习:1、显示如下菜单:

cpu)show cpu info

mem)show memory info

quit)quit

Enter your option:

2、如果用户选择cpu,则显示文件/proc/cpuinfo的信息

3、如果用户选择men,则显示文件/proc/meminfo的信息

4、如果用户选择quit,则退出,且退出码为5;

5、如果用户键入其他字符,则显示未知选项,请重新执行脚本,退出码为6。

以下解答是默认用户输入小写选项的简单版本:

#!/bin/bash

cat <<EOF

cpu:show cpu info

mem:show memory info

quit:quit

EOF

read -p "Enter your option:" userOption

if [ "$userOption" == "cpu" ] &> /dev/null;then

cat /proc/cpuinfo

elif [ "$userOption" == "mem" ] &> /dev/null;then

cat /proc/meminfo

elif [ "$userOption" == "quit" ] &> /dev/null;then

exit 5

else

echo "Bad input, try again." && bash cpuinfo.sh

fi

以下解答是接受用户大小写命令的版本:

#!/bin/bash

cat <<EOF

cpu:show cpu info

mem:show memory info

quit:quit

EOF

read -p "Enter your option:" userOption

if [[ "$userOption" =~ [Cc][Pp][Uu] ]] &> /dev/null;then

cat /proc/cpuinfo && bash cpuinfo2.sh

elif [[ "$userOption" =~ [Mm][Ee][Mm] ]] &> /dev/null;then

cat /proc/meminfo && bash cpuinfo2.sh

elif [[ "$userOption" == [Qq][Uu][Ii][Tt] ]] &> /dev/null;then

exit 5

else

echo "Bad input, please try again." && bash cpuinfo2.sh

fi

最后一题是自己写的,两个版本,自己运行时没有出错,希望朋友们可以debug。

完成了这些后,就遇到了传说中的VIM了!首先是要学会怎么退出VIM,哈哈哈哈!

时间: 2024-10-20 04:34:45

2014马哥Linux0218-1字符测试与生成交互式选项表的脚本代码的相关文章

2014马哥Linux0218-4前半部文件测试的题目

写一个下载程序: 1.首先判断wget是否存在,不存在就退出:有就执行下一步. 2.然后判断用户是否有wget的执行权限,如没有则退出,如有就执行下载. #!/bin/bash # url="http://172.16.0.1/centos6.5.repo" which wget &> /dev/null || exit 5 downloader=`which wget` [ -x $downloader ] || exit 6 $downloader $url 这里有一

2014马哥Linux0217中对0214三题的解答

前几天在做2014马哥Linux0214的作业的时候,发现其实这三题在0217中有解答,当然觉得马哥比自己写得好太多,所以忍不住要把马哥的答案贴出来,以供自己学习. 第一题:写一个脚本,用for循环实现显示/etc/init.d/functions./etc/rc.d/rc.sysinit./etc/fstab有多少行 #!/bin/bash for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab;do line

关于Linux的字符测试的详解和相关bash脚本的练习

关于Linux的字符测试的详解和相关bash脚本的练习 一.字符测试选项         == : 测试两个字符串是否相等,相等为真,不等为假.         != : 测试两个字符串是否不等,不等为真,相等为假.         -n string : 测试指定的字符串是否为空,空为真,不空为假.         -z string :测试指定的字符串是否为不空,不空为真,空为假. 二. 完成下面的bash脚本练习         练习:写一个脚本 传递一个参数(单字符就行)给脚本,如参数为

2014马哥Linux0214中关于系统启动加载环境变量的顺序问题

0214中,基于CentOS6.4,马哥说交互式用户环境变量加载顺序,如下: /etc/profile-->/etc/profile..d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc 而本人做了一个实验,在以上几处都加上了echo语句,测试到底顺序是怎样的,得到了如下的结果: /etc/profile-->/etc/profile..d/*.sh-->/etc/bashrc-->~/.bashrc-->~

2014马哥Linux0218-4中shift轮替和最后一道大题

写一个脚本,使得无论脚本后跟多少参数,都能计算出参数的和: #!/bin/bash sum=0 for i in `seq 1 $#`;do let sum+=$1 shift done echo $sum 写一个脚本:使用形式如下 userinfo.sh -u username [-v{1|2}] -u选项用于指定用户,而后脚本显示用户的UID和GID; 如果同时使用了-v选项: -v后面的值如果是1,则额外显示用户的家目录路径 -v后面的值如果是2,则额外显示用户的家目录路径和shell #

2014马哥Linux0217-4中LineCount的小程序补完版

上一篇因为没学会字符测试,所以写的文件数行脚本,运行起来并不是那么完美,看完0218-1课后,修改代码成如下,基本没有不理想的状态发现了: #!/bin/bash # read -t 10 -p "Please enter a file path in 10 seconds:" fileName #超时设置成10秒 fileName=${fileName:-null} #变量默认值的设定 if [ "$fileName" == null ];then #字符测试的语

UI测试后生成测试报告,利用shell脚本上传svn

ui测试后生成测试报告,把报告保存在某一个固定路径 shell脚本把这个报告上传 #!/bin/bash -ile #svn下载文件 #svn checkout http://svn.xxx.com/svn/xxxx/trunk/UI/report --username xxx --password dsdfsdf; svn checkout http://svn.xxx.com.cn/svn/xxxx/trunk/UI/report cd report pwd #是否存在report 文件,如

2014马哥Linux0218-4中script.sh的题目

这道题目虽然不是很难,但是如果编程不熟练的话,还是有些挑战的.在这里感谢我搜索到的这位朋友,他的解题代码给我很大的参考,他的blog是:http://sohudrgon.blog.51cto.com/3088108/1586780/ 写一个脚本,完成如下任务,其使用形式如下所示: script.sh {start|stop|restart|status} 其中: 如果参数为空,则显示帮助信息,并退出脚本: 如果参数为start,则创建文件/var/lock/subsys/script,并显示"s

马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)

马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文件系统管理详解之三10_05_脚本编程之八 脚本完成磁盘分区格式化20_01_DNS主从复制及区域传送04_04_grep及正则表达式01_03_操作系统基础08_02_bash脚本编程之七 case语句及脚本选项进阶14_03_bash脚本编程之十一(Linux启动流程之三) SysV服务脚本01