shell图形化界面
2022/7/28 5:22:44
本文主要是介绍shell图形化界面,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
shell图形化界面
whiptail
在CentOS6系统中,我们可以使用setup指令来修改网卡的IP等信息,交互起来十分方便,在CentOS7系统中,setup命令已经没有了,但是还有nmtui命令,可以让我们修改IP和主机名。 whiptail命令的作用就是可以出现一个图形化界面,并且样式有很多
消息框
#!/bin/bash whiptail --title "$HOSTNAME disk info" --msgbox "`df -h`" 30 60 --title # 指定标题内容 --msgbox # 指定信息内容 30 # 指定消息框为30 60 # 指定信息框宽度为60 $? 0
布尔值选择框
# 布尔值选择框 #!/bin/bash whiptail --title "你确定要这么做" --yesno "请做出你的选择" 30 60 echo $? yes :0 no : 1
# 案例 #!/bin/bash whiptail --title "你的性别" --yes-button "男" --no-button "女" --yesno "请做出你的选择" 30 60 echo $?
交互式输入框
语法: whiptail --title "标题" --inputbox "信息" <高度> <宽度> <默认值> #!/bin/bash a=`whiptail --title "跳板机" --inputbox "请输入ip地址" 10 60 10.0.0.7 3>&1 1>&2 2>&1 ` if [ $? -eq 0 ];then ssh $a else echo 'bey bey' fi # 选项 --inputbox: 交互式 10 :高度 60 :宽度 10.0.0.7 :默认值 # 返回值 选择OK : 0 选择cancel : 1 命令本身带输入内容,输入内容可以保存在变量中
密码输入框
pass=`whiptail --title "pass" --passwordbox "请输入你的密码:" 10 60 3>&1 1>&2 2>&3` if [ $? -eq 0 ];then if [ $pass == '1111' ];then echo "密码是$pass" else echo '密码错误' fi else echo "bey bey" fi # 返回值 选择OK : 0 选择cancel: 1 命令本身带输入内容可以保存在变量中
菜单栏
# 菜单栏 a=$(whiptail --title "家里" --menu "根据菜单选" 30 60 3 \ "1" "lb01" \ "2" "lb2" \ "3" "lb03" \ "4" "lb04" \ "5" "lb05" \ "6" "lb06" 3>&1 1>&2 2>&3) --menu # 菜单栏 30 # 高度 60 # 宽度 3 # 菜单显示多少行内容 # 返回值 OK :0 Cancel :1 选择的值会将序号保存在变量中
单选框
# 语法 a=$(whiptail --title "家里" --radiolist "根据菜单选" 30 60 3 \ "1" "lb01" OFF \ "2" "lb2" ON \ "3" "lb03" OFF \ "4" "lb04" OFF \ "5" "lb05" OFF \ "6" "lb06" OFF 3>&1 1>&2 2>&3) # 选项 --rediolist : 单选框 OFF : 默认没有被选中 ON :默认被选中 多选没有意义,后面的值会覆盖前面的选项 # 返回值 OK :0 Cancel :1
多选框
# 语法 a=$(whiptail --title "家里" --checklist "根据菜单选" 30 60 3 \ "1" "lb01" OFF \ "2" "lb2" ON \ "3" "lb03" OFF \ "4" "lb04" OFF \ "5" "lb05" OFF \ "6" "lb06" OFF 3>&1 1>&2 2>&3)
进度条
{ for ((i = 0 ; i <= 100 ; i+=1));do sleep 10 echo $i done } | whiptail --gauge "让子弹飞一会" 6 60 10
作业
搭建图形化跳板机
#!/bin/bash nginx (){ ps=`ssh 172.16.1.$1 "ps -ef | grep [n]ginx |wc -l"` if [ $ps -ne 0 ];then whiptail --title "172.16.1.$1 nginx状态" --msgbox "nginx进程存活 $ps" 30 60 else whiptail --title "172.16.1.$1 nginx状态" --msgbox "nginx不存活 已经没有进程" 30 60 fi } free (){ ssh 172.16.1.$1 free -m &>/dev/null if [ $? -eq 0 ];then whiptail --title "172.16.1.$1 内存" --msgbox "`ssh 172.16.1.$1 free -m`" 30 60 else whiptail --title "172.16.1.$1 内存" --msgbox "主机不存活" 30 60 fi } key (){ ls -l ~/.ssh/id_rsa &>/dev/null if [ $? -eq 0 ];then key=`ssh 172.16.1.$1 "cat ~/.ssh/authorized_keys |grep -w m01|wc -l"` if [ $key == '1' ];then ssh 172.16.1.$1 else whiptail --title "你确定要这么做吗?" --yesno "客户端主机还没有创建密钥是否创建" 10 60 if [ $? -eq 0 ];then sshpass -p 1 ssh-copy-id -o 'StrictHostKeyChecking no' -i ~/.ssh/id_rsa.pub root@172.16.1.$1 &>/dev/null && \ action "172.16.1.$1 send public key " /bin/true return 1 || \ action "172.16.1.$1 send public key " /bin/false ssh 172.16.1.7 fi fi else whiptail --title "你确定要这么做吗?" --yesno "主机还没有创建密钥是否创建" 10 60 if [ $? -eq 0 ];then ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null fi fi } while true;do a=$(whiptail --title "菜单" --menu "根据菜单选" 30 60 5 \ "1" "查看磁盘信息" \ "2" "连接虚拟机" \ "3" "传输文件" \ "4" "game" \ "5" "查看内存" \ "6" "退出" \ "7" "查看nginx状态" 3>&1 1>&2 2>&3) case $a in 1) b=$(whiptail --title "选择要查看的硬盘的主机" --radiolist "根据菜单选" 30 60 3 \ "1" "web01-172.16.1.7" OFF \ "2" "web02-172.16.1.8" ON \ "3" "nfs-172.16.1.31" OFF \ "4" "backup-172.16.1.41" OFF \ "5" "db01-172.16.1.51" OFF 3>&1 1>&2 2>&3) case $b in 1) whiptail --title "$HOSTNAME disk info" --msgbox "`ssh 172.16.1.7 df -h`" 30 60 ;; 2) whiptail --title "$HOSTNAME disk info" --msgbox "`ssh 172.16.1.8 df -h`" 30 60 ;; 3) whiptail --title "$HOSTNAME disk info" --msgbox "`ssh 172.16.1.31 df -h`" 30 60 ;; 4) whiptail --title "$HOSTNAME disk info" --msgbox "`ssh 172.16.1.41 df -h`" 30 60 ;; 5) whiptail --title "$HOSTNAME disk info" --msgbox "`ssh 172.16.1.51 df -h`" 30 60 ;; esac ;; 2) c=$(whiptail --title "菜单" --radiolist "你要连接的主机" 30 60 3 \ "1" "web01-172.16.1.7" OFF \ "2" "web02-172.16.1.8" ON \ "3" "nfs-172.16.1.31" OFF \ "4" "backup-172.16.1.41" OFF \ "5" "db01-172.16.1.51" OFF 3>&1 1>&2 2>&3) case $c in 1) key 7 ;; 2) key 8 ;; 3) key 31 ;; 4) key 41 ;; 5) key 51 esac ;; 3) fire=$(whiptail --title "选择要下发文件的主机" --checklist "请在下面内容选择一项,上下左右移动,空格选中" 20 60 10 \ "1" "web01-172.16.1.7" OFF \ "2" "web02-172.16.1.8" OFF \ "3" "nfs-172.16.1.31" OFF \ "4" "backup-172.16.1.41" OFF \ "5" "db01-172.16.1.51" OFF 3>&1 1>&2 2>&3) yuan_fire=`whiptail --title "xxxx" --inputbox "请输入源文件名路径:" 10 60 /etc/passwd 3>&1 1>&2 2>&3` mu_fire=`whiptail --title "xxxx" --inputbox "请输入目标文件名路径:" 10 60 /etc/passwd 3>&1 1>&2 2>&3` for i in $fire;do if [ ${i//\"/''} == '1' ];then scp $yuan_fire 172.16.1.7:$mu_fire elif [ ${i//\"/''} == '2' ];then scp $yuan_fire 172.16.1.8:$mu_fire elif [ ${i//\"/''} == '3' ];then scp $yuan_fire 172.16.1.31:$mu_fire elif [ ${i//\"/''} == '4' ];then scp $yuan_fire 172.16.1.41:$mu_fire elif [ ${i//\"/''} == '5' ];then scp $yuan_fire 172.16.1.51:$mu_fire fi done ;; 4) ;; 5) d=$(whiptail --title "选择要查看的内存的主机" --radiolist "根据菜单选" 30 60 3 \ "1" "web01-172.16.1.7" OFF \ "2" "web02-172.16.1.8" ON \ "3" "nfs-172.16.1.31" OFF \ "4" "backup-172.16.1.41" OFF \ "5" "db01-172.16.1.51" OFF 3>&1 1>&2 2>&3) case $d in 1) free 7 ;; 2) free 8 ;; 3) free 31 ;; 4) free 41 ;; 5) free 51 ;; esac ;; 6) pass=`whiptail --title "请输入密码" --passwordbox "请输入你的密码: " 10 60 3>&1 1>&2 2>&3` if [ $pass == 'qqqqq' ];then exit else whiptail --title "密码错误" --msgbox "密码错误" 30 30 fi ;; 7) e=$(whiptail --title "选择要查看的nginx的主机" --radiolist "根据菜单选" 30 60 3 \ "1" "web01-172.16.1.7" OFF \ "2" "web02-172.16.1.8" ON \ "3" "nfs-172.16.1.31" OFF \ "4" "backup-172.16.1.41" OFF \ "5" "db01-172.16.1.51" OFF 3>&1 1>&2 2>&3) case $e in 1) nginx 7 ;; 2) nginx 8 ;; 3) nginx 31 ;; 4) nginx 41 ;; 5) nginx 51 ;; esac esac done
这篇关于shell图形化界面的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署