1.case语句
(1)语法结构
case var in
pattern 1)
command 1
pattern 2)
command 2
*)
command 3
;;
esac
(2)示例
模拟多任务界面,当执行程序时先显示总菜单,然后进行选择后做相应维护监控操作
——请选择——
h 显示命令的帮助
f 显示磁盘分区
d 显示磁盘挂载
m 显示内存使用
u 显示系统负载
q 退出程序
————————
#!/bin/bash
function menu(){
echo "
h 显示命令的帮助
f 显示磁盘分区
d 显示磁盘挂载
m 显示内存使用
u 显示系统负载
q 退出程序
"
}
menu
while true
do
read -p "请输入你要操作的选项(h|f|d|m|u|q): " choice
case $choice in
h)
menu
;;
f)
echo "*********磁盘分区信息"
blkid | cut -d: -f1
;;
q)
echo "程序正在退出,欢迎下次使用......"
exit 0
;;
m)
echo "*********内存信息"
free -m
;;
*)
echo "请通过h查看帮助信息"
;;
esac
done
2.函数
shell 中允许将一组命令集合或语句形成一段可用代码,称为shell函数
给这段代码起个名字称为函数名,后续可以直接调用该段代码的功能
(2)函数定义
<1>
函数名()
{
函数体(一堆命令的集合,来实现某个功能)
}
<2>
function 函数名()
{
函数体(一堆命令的集合,来实现某个功能)
echo hello
echo world
}
有颜色的字符串输出:
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
PINK="\033[35m"
END="\033[0m"
print_color_string(){
color=$1
string=$2
case $color in
red)
echo -e "$RED $string $END"
;;
green)
echo -e "$GREEN $string $END"
;;
yellow)
echo -e "$YELLOW $string $END"
;;
*)
echo $string
;;
esac
}
print_color_string 'red' 'hello world'
print_color_string 'green' 'hello world'
用户管理脚本
需求如下:
- 执行 users_create.sh userlist passlist
- 建立 userlist 列表中的用户
- 设定 userlist 列表中的密码为 passlist 列表中的密码
- 当脚本后面跟的文件个数不足两时,报错
- 当文件行数不一致时报错
- 当文件不存在时报错
- 当用户存在时报错
#!/bin/bash
##判断当前用户是否为root
[ `id -u` -eq 0 ] || echo "ERROR:this script must run as root"
##判断是否指定两个文件
[ $# -eq 2 ] || {
echo "ERROR:please input file and password file"
exit 1
}
[ -e $1 -a -f $1 ] || {
echo "未指定用户文件"
exit 1
}
[ -e $2 -a -f $2 ] || {
echo "未指定密码文件"
exit 1
}
##判断userfile和passfile中的行数是否匹配
N=`awk 'BEGIN{n=0}{n++}END{print n}' userfile`
M=`awk 'BEGIN{m=0}{m++}END{print m}' passfile`
##或
##N=`wc -l $1 | cut -d '' -f1`
##M=`wc -l $2 | cut -d '' -f1`
[ "$N" != "$M" ] && {
echo "用户与密码行数不匹配"
exit
}
##
for i in `seq 1 $N` ##1到N循环
do
#创建变量UserName和PassName
UserName=`sed -n ${i}P userfile` ##userfile的第几行
PassName=`sed -n ${i}P passfile`
#判断系统中是否已经存在该用户,如果存在,报错,反之则进行创建
if id $UserName > /dev/null 2>&1
then
echo "$UserName 已经存在"
continue
else
useradd $UserName
echo $PassName | passwd --stdin $UserName
echo "$UserName 创建成功"
fi
done