Shell图形化工具dialog使用简述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

dialog安装

yum install -y dialog

dialog 常用命令

liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。
每个对话框提供的输出有两种形式

  1. 将所有输出到stderr 输出不显示到屏幕。
  2. 使用退出状态码“OK”为0“NO”为1,"ESC"为255

命令选项

通用选项 common options(这个选项来设置dialog box的背景颜色和 标题等)[–title ] 指定将在对话框的上方显示的标题字符串<br/> [–colors] 解读嵌入式“\ Z”的对话框中的特殊文本序列序列由下面的字符 0-7, b B, u, U等恢复正常的设置使用“\Zn”。<br/> [–no-shadow] 禁止阴影出现在每个对话框的底部<br/> [–shadow] 应该是出现阴影效果[–insecure] 输入部件的密码时明文显示不安全使用星号来代表每个字符[–no-cancel] 设置在输入框菜单和复选框中不显示“cancel”项<br/> [–clear] 完成清屏操作。在框体显示结束后清除框体。这个参数只能单独使用不能和别的参数联合使用。<br/> [–ok-label ] 覆盖使用“OK”按钮的标签换做其他字符。<br/> [–cancel-label ] 功能同上<br/> [–backtitle ] 指定的backtitle字符串显示在背景顶端。<br/> [–begin ] 指定对话框左上角在屏幕的上的做坐标<br/> [–timeout ] 超时返回的错误代码如果用户在指定的时间内没有给出相应动作就按超时处理<br/> [–defaultno] 使的是默认值 yes/no使用no<br/> [–sleep ]<br/> [–stderr] 以标准错误方式输出<br/> [–stdout] 以标准方式输出<br/> [–default-item ] 设置在一份清单表格或菜单中的默认项目。通常在框中的第一项是默认

窗体类型

常见的对话框控件选项有

[ --calendar ] 提供了一个日历让你可以选择日期

[ --checklist ] 允许你显示一个选项列表每个选项都可以被单独的选择 (复选框)

[ --from ] 允许您建立一个带标签的文本字段并要求填写

[ --fselect ] 提供一个路径让你选择浏览的文件

[ --gauge ] 显示一个表呈现出完成的百分比就是显示出进度。

[ --infobox ] 显示消息后没有等待响应对话框立刻返回但不清除屏幕 (信息框)

[ --inputbox ] 让用户输入文本 (输入框 )

[ --inputmenu ] 提供一个可供用户编辑的菜单 可编辑的菜单框

[ --menu ] 显示一个列表供用户选择 (菜单框)

[ --msgbox ] 显示一条消息并要求用户选择一个确定按钮 (消息框 )

[ --pause ] 显示一个表格用来显示一个指定的暂停期的状态

[ --passwordbox ] 显示一个输入框它隐藏文本

[ --passwordfrom ] 显示一个来源于标签并且隐藏的文本字段

[ --radiolist ] 提供一个菜单项目组只有一个项目可以选择 (单选框 )

[ --tailbox ] 在一个滚动窗口文件中使用tail命令来显示文本

[ --tailboxbg] 跟tailbox类似但是在background模式下操作

[ --textbox ] 在带有滚动条的文本框中显示文件的内容 (文本框)

[ --timebox ] 提供一个窗口选择小时分钟秒

[ --yesno ] 提供一个带有yes和no按钮的简单信息框 (是/否框)

实战基于华为云k8s集群

#!/bin/bash
##qjzhao 20230202

log(){
 dialog --backtitle "pms30"  --title "目录" --inputbox "输入您要查询的微应用" 10 30 2>menu
 value1=`cat menu` 
 kubectl get pods --all-namespaces |grep "$value1" >/dev/null
 kubectl get pods --all-namespaces  |grep "$value1"|awk '{print FNR " "  $2" "$1}'>menu
 value=`cat menu`
 dialog --backtitle "pms30"  --radiolist  "根据您的需求做出选择" 20 60 7 $value 2>menu
 dialog --backtitle "pms30"  --title "目录" --inputbox "请输入你要查询日志的行数" 10 30 2>row
 aa=`cat menu`
 pod=`kubectl get pods --all-namespaces  |grep "$value1"|awk '{print FNR " "  $2" "$1}'|grep "$aa"|awk '{print $2}'`
 rows=`cat row`
 echo '' >log 
 `ps -ef|grep "kubectl logs"|grep -v "color=auto"|awk '{print $2}'|xargs kill -9`
 dialog --backtitle "pms30"  --title "LOG VIEW" --msgbox "1s后即将展示日志" 8 30
 clear
 sleep 1
 kubectl logs -f $pod --tail=$rows -n pms30 >log &
 dialog --backtitle "pms30"  --title "LOG VIEW" --tailbox log -1 1000
}

save(){
 rm -rf /tmp/*.log
 rm -rf /log/*.log
 dialog  --backtitle "pms30 作者:赵权瑾"  --title "查询" --inputbox "输入您要查询的微应用" 10 30 2>menu
 value1=`cat menu` 
 kubectl get pods --all-namespaces |grep "$value1" >/dev/null
 kubectl get pods --all-namespaces  |grep "$value1"|awk '{print FNR " "  $2" "$1}'>menu
 value=`cat menu`
 dialog  --backtitle "pms30 作者:赵权瑾"  --checklist  "根据您的需求做出选择(可批量选择)" 20 60 7 $value 2>menu
 dialog  --backtitle "pms30 作者:赵权瑾"  --title "row" --inputbox "请输入你要保存日志的行数" 10 30 2>row
 aa=`cat menu|xargs -n 1`
 aas=`cat menu|xargs -n 1|wc -l`
 rows=`cat row`
 echo ''> menu1
 for a in $aa
  do
 pod= kubectl get pods --all-namespaces|grep "$value1"|awk '{print FNR " "  $2" "$1}'|grep "^$a"|awk '{print $2}'  >>menu1
 done
grep -v "^$" menu1 >menu2
cc1=`cat menu2|awk '{print FNR " " $1}'|awk '{print $1}'`
for c in $cc1
 do
  pod1=`cat menu2|awk '{print FNR " " $1}'|awk '{print $1 " "  $2}'|grep "^$c" |grep $value1|awk '{print $2}'`
  timeout -s 9 15  kubectl logs -f $pod1 --tail=$rows -n pms30 >/log/$pod1.log|for i in {1..100}
 do echo $i
sleep 0.15
done|dialog  --backtitle "pms30 作者:赵权瑾" --title "保存日志" --gauge "本次一共保存$aas个日志,正在保存第$c个日志 $pod1.log(单个日志保存时间为15s)请稍后……" 10 120 
done

##发送邮件
#echo "hello word"|mail -s "this is test" gwscdl_zyywzt@sc.sgcc.com.cn
`tar zcvf /log/$value1.tar.gz /log/$value1*.log`
echo "本次一共保存$aas个日志,清单如下:`\n`  `cat menu2`"|mail -s "$value1日志保存" -a /log/$value1*.tar.gz  gwscdl_pms30@sc.sgcc.com.cn
rm -rf /log/$value1*.tar.gz
dialog  --backtitle "pms30 作者:赵权瑾"  --title "LOG" --msgbox "本次日志已保存到/log/并发送邮件至gwscdl_pms30@sc.sgcc.com.cn(邮件发送稍有延迟),请及时查验再次执行保存日志时,本次日志将会被删除" 8 150

}

del_noactive_pod(){
kubectl get pods -A|egrep -v "Running|NAME"|awk '{print $2}'>delpod 
delpod=`cat delpod`
for i in $delpod
do
kubectl delete pod  $i -n pms30
done|dialog  --backtitle "pms30 作者:赵权瑾" --title "删除pod" --gauge "删除启动失败pod中请稍后……" 10 50
}

menu(){
dialog  --backtitle "pms30 作者:赵权瑾" --title "目录" --menu "根据您的需求做出选择" 20 50 10  \
1 "查询微应用日志" \
2 "删除特定的pod(服务器运维人员专)" \
3 "微应用日志保存" \
4 "在线修改副本数(运维人员专用)" \
5 "查看集群当前正在使用的ImageVersion" \
6 "查看集群Node污点" \
7 "删除启动失败的POD" \
0  "退出shell" 2>./menu
num=`cat menu`
case $num in 
  1)
  log  
  ;;
  2)
  ;;
  3)
  save
  ;;
  4)
  ;;
  5)
  ;;
  6)
  ;;
  7)
  del_noactive_pod
  ;;
  0)
  #dialog  --backtitle "pms30 作者:赵权瑾" --title "EXIT" --msgbox "程序即将退出" 8 20
  exit 0
;;
esac
clear
}

while :
do 
clear
menu
done

实战截图

查询pod日志
保存多个pod日志
保存日志的行数
保存提示
将保存日志发送至邮箱

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell