Ubuntu-Shell图形化工具-zenity

Ubuntu-Shell图形化工具

脚本中加入更多的图形元素。
   KDE和GNOME桌面环境都扩展了dialog命令,包含了可以在各自环境下生成X Window 图形化部件的命令。
    kdialog和zenity包,它们各自为KDE和GNOME桌面提供了图形化窗口部件

1.查看内核版本命令:
    cat /proc/version 
	uname -a 

2.查看桌面版本
  01.pgrep是linux中常用的通过程序名称来查询进程的工具,一般是用来判断程序是否正在运行及查找正在运行进程的PID信息。通过pgrep命令,可以只指定进程的一部分名称从运行进程队列中进行查看进程的PID信息,但只输出PID号,不便于理解。
      可以结合‘-l’选项在显示PID的同时也显示这个进程的名称
	  pgrep -l "gnome|kde|mate|cinnamon|lxde|xfce|jwm"
	  
  02. /etc下面有没有gnome文件夹或者kde文件夹,如果都有,就是都安装了或者安装过。	

   pgrep 和 pkill命令
     pgrep 相当于  ps -aux | grep 进程名 | grep -v grep| awk '{print $2}' 
     pidof 是Linux系统中用来查找正在运行进程的进程号(pid)的工具,功能类似pgrep和ps
	 
      kill 默认传递终止进程运行的信号给进程  最常被使用的信号是1/9/15
      killall (kill processes by name)用于杀死进程,与 kill 不同的是killall 会杀死指定名字的所有进程
	  pkill 还有一个更重要的功能,即按照终端号来踢出用户登录 pkill -u mark,danny //结束mark,danny用户的所有进程
###脚本示例
 pgrep mysql | xargs kill -s 9
 ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
 kill -s 9 `pgrep mysql` 
 
    脚本说明:
	   grep -v grep;这句命令是什么意思。其实是为了从查询结果中去掉包含grep的记录, -v 后面的grep可以改为你想过滤的值
	   awk 
	     两个单引号加大括号  默认字段分割符是空格或者 Tab键
          print	将字段列出来
          每一行的字段都有变量名 $1 $2
          自定义分隔符 BEGIN {FS=":"}
     kill -9 pid 等于 kill -s 9 pid  			  
     cut  按字符截取:选项-c	
        截取file中所有行从第一个字符到第index个字符之间的所有字符(index最小值为1,截取包含头尾字符)		
###参考:https://cloud.tencent.com/developer/article/1840343	
     ps -a   | grep mysql | grep -v grep | cut -c 1-2       | xargs kill -9 
     ps -aux | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9
    
	USER 表示进程的用户,PID 是进程的 ID,%CPU 和 %MEM 分别表示 CPU 和内存的占用百分比,COMMAND 是启动进程的命令行。
	STIME :系统启动时间  TTY:登入者的终端机位置     TIME:使用掉的CPU时间
    -a: 显示所有用户的进程,而不仅仅是当前用户的
	-u: 显示详细的用户/拥有者(user)信息
	-x: 显示没有控制终端的进程。
  -e:显示所有进程 等同于-A
  ps -ef 是System V展示风格   ps aux是BSD风格
    1.command列如果过长,aux会截断显示,而-ef不会截断;
    2.如果想查看进程的CPU占用率和内存占用率,使用aux;
    3.如果想查看进程的父进程ID和完整的command,使用-ef

3.GNOME图形化环境支持两种流行的可生成标准窗口的包:
      gdialog
      zenity
   到目前为止,zenity 是大多数GNOME桌面Linux发行版上最常见的包
    zenity 在shell脚本中显示对话框	   

Zenity是一个Linux下的命令行工具,它可以生成Gtk+图形用户界面(GUI)对话框,支持多种窗口类型和选项

zenity 示例

#!/bin/bash
weather=$(zenity --list \
       --title="step 1:Choose the weather " \
       --column="Hello"  \
       sunny \
       cloudy  \
       rainny \
	   snowy \
	   Foggy
	   )
NUMBER=2 
RESULT_PATH=~/$school_$(date "+%Y%m%d")_$(weather)/
# 如果目录不存在,则创建它
if [ ! -d "$RESULT_PATH" ]; then
  mkdir -p "$RESULT_PATH"
fi
#循环执行
for ((i=0;i< $NUMBER;i++))
do
    WEA_PATH=~/school_${weather}_$(date "+%Y%m%d%H%M%S").txt
    echo " $i  *_*  $WEA_PATH " 
    echo " $i  ^_^  $RESULT_PATH ^_^ ........"
done
echo "---success---"

whiptail

whiptail 是一个基于ncurses的工具,它可以帮助我们在终端中创建各种对话框,如消息框、菜单、输入框等,从而改善用户的交互体验
    Ncurses 是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库
	   Linux终端图形编程的不二选择(比如著名的文字编辑器vi就是基于curses编的)ncurses(new curses),
	           Emacs其实是个Lisp的解释器,因此可以用Lisp灵活地扩展
	       现在我们大部分的彩色终端应用程序都会用到libncurses库 
	   Ncurses 使用了 termcap  terminfo	所有不同类型终端的描述收集到一个数据库
          Terminfo打败了Termcap,成为了Linux上的事实的标准 -控制台终端    
         	Termcap(terminal capabilities)
            Terminfo(terminal information)
    tput命令是一个配置或者查询终端的应用程序
      echo $TERM $LINES   $COLUMNS; 可以看到当前终端  的终端类型 以及多少行,多少列
使用说明:
   –menu:创建一个菜单
  –radiolist:创建一个单选按钮列表
三种返回状态:
       0:用户选择 OK 按钮
       1:用户选择 Cancel 按钮
       -1:内部异常或者 ESC 退出(测试 ESC 按键没有反应)

whiptail 的菜单正好可以实现接收用户选择的功能  

示例

#!/bin/bash
options=("sunny" " : 晴天" "cloudy" " : 阴天" "rainny" " : 雨天" "snowy" " : 雪天")
weather=$(whiptail --title "Menu Dialog" --menu "Choose weather." 15 30 5 \
           "${options[@]}" \
		   3>&1 1>&2 2>&3
		   )
exitstatus=$?
if [ $exitstatus = 0 ]; then
	WEA_PATH=~/school_${weather}_$(date "+%Y%m%d%H%M%S").txt
	echo "$WEA_PATH"
	{
    for ((i = 0 ; i <= 10 ; i+=2)); do
        sleep 1
        echo '$i*10'
    done
    } | whiptail --gauge "Please wait for school info" 6 60 0
else
    echo "You chose Cancel."
fi

说明:

Linux 的标准输入输出流只有三种,即 0-stdin 、1-stdout、2-stderr
2、&标准流 是一个指向标准流的指针,如果没有 & ,就是创建的一个普通的文件句柄。
3、>&标准流 指将某个文件重定向到另一个流
4、这里的 3>&1 ,的含义是:先创建一个文件句柄 3,将其重定向到1(out),再将 1 重定向 2 ,最后再将 2 重定向到 3 。这么绕了一圈就是初学编程时交换两个变量的过程,将 error 的内容重定向到 out 了,out 重定向到 error 

用户界面-User Interface

 图形用户界面(GUI)和命令行界面(CLI)
    1.命令行界面(CLI)(Command Line Interface)
     Linux中,常见的命令行界面工具有Bash、Zsh等
	 
    1.5 TUI(文本用户界面)  Text User Interface,文本用户界面
      称为 基于文本的用户界面(Text-based User Interface) 
	     TUI 应用程序通常也被认为是 CLI 应用程序,因为它们被限制在终端上
		Linux终端上绘制统计图表,可以使用工具如”gnuplot”或”plotutils” 
   
    2.图形用户界面(GUI)(Graphical User Interface):
      Linux有多种桌面环境供用户选择,其中一些较为流行的包括 GNOME、KDE Plasma、XFCE、LXDE
 服务器	和桌面
    1.纯终端窗口显示对话框的工具
         用户是在服务器上工作的(在没有图形界面时),确保总能显示,那就使用 whiptail 或者任何其它在纯终端窗口显示对话框的工具    
      whiptail
      
	  Textual 是一个为 Python 构建的快速应用程序开发框架,由 Textualize.io 构建。
	      它可以让你用简单的 Python API 构建复杂的用户界面,并运行在终端或网络浏览器上
    2.桌面机器用户通常使用GUI窗口环境,也可能运行脚本并与显示的窗口进行交互。
	  zenity 
	
	3.桌面应用与基于浏览器的应用	  
	
 应用案例:
  1:通过命令行方式解析 JSON 内容的工具:jq
    使用 jq 从  JSON 文件中提取配置详细信息,并且使用 zenity 来组织流程	 

Linux终端复用软件

1.传统的终端环境:xterm
  MobaXterm
  普通终端+nohup 
    scp 并不支持断点续传。可以改用 rsync
2.终端复用软件:
   screen 是一个用于命令行终端切换的自由软件,
   tmux  多个窗口切,一屏显示多窗口,会话保持
3.服务器和桌面
  桌面环境 Ubuntu默认软件中,终端是gnome-terminal  
   xterm-256color	  
   
  命令:  gnome-terminal  编一个shell脚本,直接配置终端窗口
    gnome-terminal --window --working-directory
	 --tab
   快捷键
   
  All-in-One 的哲学
 一个程序只做一件事并做好它”的 Unix哲学	 
     通过管道机制和系统内各种积木工具打交道, 它讲究的是和系统内的工具程序协作来完成用户的任务	 

参考

 https://help.gnome.org/users/zenity/stable/index.html.zh_CN
Zenity - 在Shell下迈向图形化的GUI工具  https://blog.csdn.net/DarlingTeng/article/details/106266964  
 Shell 脚本中 3>&1 1>&2 2>&3 的含义 https://blog.csdn.net/wojiushiwo945you/article/details/100727522
 https://linuxgeeks.github.io/2015/10/01/172135-%E4%BD%BF%E7%94%A8whiptail%E5%88%9B%E5%BB%BA%E4%BA%A4%E4%BA%92%E5%BC%8Fshell%E5%AF%B9%E8%AF%9D%E6%A1%86/
posted @ 2024-07-03 18:32  辰令  阅读(13)  评论(0编辑  收藏  举报