为了能到远方,脚下的每一步都不能|

南哈哈

园龄:3年10个月粉丝:2关注:0

Shell 流程控制 (if与case)

流程控制:if

模式匹配:case

command命令

 

 

流程控制:if

#单分支结构
if 条件测试;then
命令序列
fi
#双分支结构
if 条件测试;then
命令序列
else
命令序列
fi
#多分支序列
if 条件测试1;then
命令序列
elif 条件测试2;then
命令序列
elif 条件测试3;then
命令序列...
else
命令序列
fi
#示例
read -p "确认开始安装KVM[y]: " kvm_install
if [ ! "${kvm_install}" = "y" ];then
echo "输入不正确! "
exit
fi

模式匹配:case

#case 语法结构
case "变量" in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
*)
无匹配后命令序列
esac

示例

case 示例
cat del_user.sh
#!/bin/bash
read -p "请输入要删除的用户: " user
id $user &>/dev/null
if [ $? -ne 0 ];then
echo "$user: no such user"
exit 1
fi
read -p "确定要删除吗?[y/n]: " action
#if [ "$action" = "y" ];then
# userdel -r $user
# echo "用户$user已删除"
#fi
case "$action" in
y|yes)
userdel -r $user
echo "$user 用户已删除"
;;
n|no)
echo "取消删除成功!"
;;
*)
echo “请输入正确的参数!”
;;
esac

小作业

系统管理工具箱
#!/bin/bash
menu(){
cat <<-EOF
#########################
# h 显示帮助命令
# f 显示磁盘分区
# d 显示磁盘挂载
# m 查看内存使用
# q 退出当前程序
##########################
EOF
}
menu
while true
do
read -p "Command(h for help): " action
case "$action" in
h|help)
clear
menu
;;
f)
lsblk
;;
d)
df -h
;;
m)
free -h
;;
u)
uptime
;;
q)
#exit #退出程序
break #跳出循环
;;
"") #如果为空不输出下面的"*"
;;
*)
echo "请输入正确的参数"
;;
esac
done
echo "finish....."

小作业2

简单的JumpServer
创建简单的jumpserver服务器,将脚本放入.bash_profile 文件中,登录到服务器自动执行该脚本,trap捕捉键盘输入^C 等操作。
#!/bin/bash
trap "" HUP INT OUIT TSTP # 捕捉到对应信号什么都不做
web1=192.168.128.186
web2=192.168.128.187
web3=192.168.128.200
while true
do
clear
cat <<-EOF
+-----------------------+
| JumpServer |
| 1.web1 |
| 2.web2 |
| 3.web3 |
+-----------------------+
EOF
echo -en "\e[31minput number: \e[0m"
read num
case "$num" in
1)
ssh south@$web1
;;
2)
ssh south@$web2
;;
3)
ssh south@$web3
;;
4)
exit
;;
"")
;;
*)
echo "error"
;;
esac
done
cat .bash_profile
...
/home/south/jumpserver.sh
登出文件
.bash_history
.bash_logout
系统级别的启动文件
/etc/profile
/etc/bashrc
用户级别启动文件
.bash_profile
.bashrc

 

command命令

~ » command -v /etc/hosts
~ » echo $?
1
~ » command -v ls
alias ls='ls -G'
~ » command -v /bin/ls
/bin/ls
~ » echo $?
0
使用command -v 查看是否是一个命令。
cat if_command.sh
#!/bin/bash
cmd=/bin/ls
if command -v $cmd &>/dev/null;then
: # 使用":|true"参数 脚本为真,不输出任何内容。
else
echo "$cmd is not command"
fi

whoami命令

$ w
00:02:32 up 1:00, 3 users, load average: 0.02, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 23:02 1:00m 0.01s 0.01s -bash
root pts/0 192.168.128.1 23:02 17:20 0.15s 0.00s sh jumpserver.sh
root pts/1 192.168.128.1 23:44 0.00s 0.06s 0.03s w
$ who
root tty1 2022-05-23 23:02
root pts/0 2022-05-23 23:02 (192.168.128.1)
root pts/1 2022-05-23 23:44 (192.168.128.1)
$ whoami
root

 

本文作者:南哈哈

本文链接:https://www.cnblogs.com/nanruosen/p/16296399.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   南哈哈  阅读(87)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起