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,哈哈哈哈!