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


最后是马哥的版本:

#!/bin/bash

#

returnValue=0


cat <<EOF

cpu) Print cpu information

mem) Print memory infomation

quit) Quit

EOF


read -p "Enter your option:" userOption

userOption=`echo $userOption | tr 'A-Z' 'a-z'` #这里的转换大小写命令很赞!


if [[ "$userOption" == "cpu" ]];then

cat /proc/cpuinfo

elif [[ "$userOption" == "mem" ]];then

cat /proc/meminfo

elif [[ "$userOption" == "quit" ]];then

echo "quit"

returnValue=6

else

echo "unknown option"

returnValue=7

fi

#[ -z $returnValue ] && returnValue=0 这句也可以写这里,作预设判断

exit $returnValue


其实我还是觉得马哥写的最好!

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

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

你可能感兴趣的:(linux,交互式,字符测试)