1、写一个脚本
(1) 能接受四个参数:start, stop, restart, status
start: 输出“starting 脚本名 finished.”
…
(2) 其它任意参数,均报错退出;
#!/bin/bash#
case $1 in
start)
echo "starting $0 finished"
;;
stop)
echo "stopping $0 finished"
;;
restart)
echo "restarting $0 finished"
;;
status)
echo "status $0 finished"
;;
*)
echo "Usage:$(basename $0){start|stop|restart|status}"
exit 1
;;
esac
2、写一个脚本,判断给定的用户是否登录了当前系统;
(1) 如果登录了,则显示用户登录,脚本终止;
(2) 每3秒钟,查看一次用户是否登录;
#!/bin/bash#
method() {
status=$(who | grep $1)
if [[ -n "$status" ]];then
touch /tmp/online
fi
}
while true;do
method $1 && sleep 3
if [ -f /tmp/online ];then
echo "$1 is online"
else
echo "$1 isn't online"
fi
rm -f /tmp/online
done
3、写一个脚本,显示用户选定要查看的信息; cpu) display cpu info mem) display memory info disk) display disk info quit) quit 非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;
#!/bin/bash#
cat <<EOF
输入mem>display memory info
输入disk>display disk info
按Q>退出
EOF
read -p ‘请按对应的字母键,否则五秒后自动退出’ -t 5 name
if [[ "$name" == "Q" ]];then
echo "您选择退出";
exit 1
elif [[ "$name" == "cpu" ]];then
cat /proc/cpuinfo
elif [[ "$name" == "mem" ]];then
df -lh
elif [[ "$name" == "disk" ]];then
fdisk -l
else
echo "您输入有误,请重新选择"
bash $0
fi
4、写一个脚本
(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;
(2) 提示用户输入一个用户名或输入“quit”退出;
当输入的是用户名,则调用函数显示用户信息;
当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:
#!/bin/bash#
doing() {
read -p "请输入用户名或quit退出" name
if [[ "$name" == "quit" ]];then
exit 0
else
userinfo $name
fi
}
userinfo() {
id $1 &> /dev/null
if [ $? -eq 0 ];then
grep -E ^$1 /etc/passwd | awk -F: '{print $3,$NF}'
doing
else
echo "user not exist"
exit
fi
}
doing
5、写一个脚本,完成如下功能(使用函数)
(1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;
(2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;
(3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;
#!/bin/bash#
doing() {
mkdir -p /mnt/sysroot
read -p "请输入一个可执行命令" name
which $name &> /dev/null
if [ $? -eq 0 ];then
path=$(which $name)
ldd $path
echo "==========开始复制命令文件=========="
new_command_path=$(echo ${path%/*})/
cp -r $path /mnt/sysroot/$new_command_path &> /dev/null
echo "==========复制命令文件完毕=========="
echo "==========开始复制命令依赖的库文件=========="
mkdir -p /mnt/sysroot/$new_command_path/$name-lib
for i in $(ldd $path);do
cp $i /mnt/sysroot/$new_command_path/$name-lib &> /dev/null
done
echo "==========复制命令依赖的库文件完毕=========="
else
echo "the command not found"
exit 1
fi
}
doing