02 图形化界面中的shell 编程

shell脚本编写完成后。可以通过与图形化操作软件连接,形成更加友好的交互式操作界面。

  • 常用的制作图形化窗口的软件

1) dialog 包
2)kdialog 包
3)gdialog包
4) zenity 包

  • Zenity可以创建下列类型的简单对话框

1)日历
2)文件选择框
3)列表框
4)提示框
5)消息框
6)进度框
7)文本框
8)文本信息框

1 日历

日历选项
  --calendar                             显示日历对话框
  --text=文字                            设置对话框文字
  --day=日                               设置日
  --month=月份                           设置月份
  --year=年份                            设置年份
  --date-format=模式                     设置返回日期的格式
日历

2 文件选择框

文件选择选项
  --file-selection                       显示文件选择对话框
  --filename=文件名                      设置文件名
  --multiple                             允许选中多个文件
  --directory                            允许只选择文件夹
  --save                                 激活保存模式
  --separator=分隔符                     设置输出分隔符
  --confirm-overwrite                    若文件名已存在则确认是否覆盖文件
  --file-filter=名称 | 模式1 模式2 …     设置文件名过滤器
2021-08-09 17-37-33 的屏幕截图.png

3 列表框

列表选项
  --list                                 显示列表对话框
  --text=文字                            设置对话框文字
  --column=列                            设置列标题
  --checklist                            第一列使用复选框
  --radiolist                            第一列使用单选钮
  --imagelist                            第一列使用图像
  --separator=分隔符                     设置输出分隔符
  --multiple                             允许选中多行
  --editable                             允许更改文字
  --print-column=序号                    打印指定列(默认为 1。“全部”可用于打印全部列)
  --hide-column=序号                     隐藏指定列
  --hide-header                          隐藏列头
  --mid-search                           改变默认列表文本搜索模式为从中间开始,而不是从头开始
2021-08-09 18-02-08 的屏幕截图.png

4 提示框

通知图标选项
  --notification                         显示通知
  --text=文字                            设定通知文字
  --listen                               在 stdin 上监听命令
  --hint=文字                            设定通知提示
2021-08-09 18-12-38 的屏幕截图.png

5 消息框

信息选项
  --info                                 显示信息对话框
  --text=文字                            设置对话框文字
  --icon-name=图标名                     设置对话框图标
  --no-wrap                              不启用文本自动换行
  --no-markup                            不启用 pango 标记
  --ellipsize                            在对话框文本中启用简略显示。这可以修复带有长文本的窗口的尺寸过大。
2021-08-09 18-17-16 的屏幕截图.png

6 进度框

进度选项
  --progress                             显示进度指示对话框
  --text=文字                            设置对话框文字
  --percentage=百分比                    设定初始百分比
  --pulsate                              跳动进度条
  --auto-close                           达到 100% 时关闭对话框
  --auto-kill                            若按下取消按钮则终止父进程
  --no-cancel                            隐藏取消按钮
  --time-remaining                       在进度快到 100% 时进行预估
2021-08-09 18-22-48 的屏幕截图.png

7 文本框


文本信息选项
  --text-info                            显示文本信息对话框
  --filename=文件名                      打开文件
  --editable                             允许更改文字
  --font=文字                            设置文本字体
  --checkbox=文字                        启用 我已阅读并同意 复选框
  --html                                 启用 HTML 支持
  --no-interaction                       不让用户与 WebView 进行交互。只在使用 --html 选项时有效
  --url=URL                              设置一个 URL 而非一个文件。只在使用 --html 选项时有效
  --auto-scroll                          自动滚动文本到末尾。只适于文本从标准输入获取的情况
文字输入选项
  --entry                                显示文本输入对话框
  --text=文字                            设置对话框文字
  --entry-text=文字                      设置输入文字
  --hide-text                            隐藏输入文字
2021-08-09 22-30-44 的屏幕截图.png

8 文本信息框

文本信息选项
  --text-info                            显示文本信息对话框
  --filename=文件名                      打开文件
  --editable                             允许更改文字
  --font=文字                            设置文本字体
  --checkbox=文字                        启用 我已阅读并同意 复选框
  --html                                 启用 HTML 支持
  --no-interaction                       不让用户与 WebView 进行交互。只在使用 --html 选项时有效
  --url=URL                              设置一个 URL 而非一个文件。只在使用 --html 选项时有效
  --auto-scroll                          自动滚动文本到末尾。只适于文本从标准输入获取的情况
2021-08-09 22-38-21 的屏幕截图.png
## zenity 在大多数GNOME桌面linux发现版本上是最常见的包,本次练习使用zenity
cat wgs  # 内部程序如下
chmod  +x wgs
#!/usr/bin/bash
# a test for zenity

temp1=$(mktemp -t temp.XXXXXXXXX)
select=$(mktemp -t temp1.XXXXXXX)
download_Fastqc() {
        fastqc -h
        if [ $? -ne 0 ]
        then
                zenity --question --text "在环境变量中未找到fastqc程序,是否安装软件FastQC?"
                if [ $? -eq 0 ]
                then
                        zenity --notification --text "请选择安装的路径!"
                        local Fastqc_dict=$(zenity --file-selection --directory)
                        wget -P $Fastqc_dict https://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.9.zip \
                                && cd ${Fastqc_dict} && unzip fastqc_v0.11.9.zip && cd ${Fastqc_dict}/FastQC && chmod 755 fastqc\
                                && echo "export PATH=\"${Fastqc_dict}/FastQC/:\$PATH\"" >> ~/.bashrc && source ~/.bashrc
                else
                        break
                fi
        fi
}

Fastqc() {
        fq_array=($(zenity --file-selection --multiple ----separator=" "))
        zenity --notification --text "请选择结果存放路径!"
        local outPutDir=$(zenity --file-selection --directory)
        mkdir -p $outPutDir/$(date +"%Y%m%d")_fastqcResult/
        zenity --notification --text "请选择fastq文件!"
        zenity --file-selection --multiple --separator=" " > $temp1
        fq_array=(`cat $temp1`)
        fastqc ${fq_array[@]} -o $outPutDir/$(date +"%Y%m%d")_fastqcResult/
}

Trimmatic() {
        zenity --info "this is Trimmatic"
}

Bwa() {
        zenity --info "this is Bwa"
}

Gatk() {
        zenity --info "this is Gatk"
}


while [ 1 ]
do
        zenity --list --checklist --separator=" " --title "请选择如下功能(可复选)" --column "选项" --column "内容" \
               FALSE "FastQC-查看fastq文件质量" FALSE "Trimmatic-fastq文件质控" FALSE "Bwa-fastq文件回帖" FALSE "GATK-Call VCF"  FALSE "EXIT" >$select
        if [ $? -eq 1 ];then
                break
        fi

        selection=(`cat $select`)
        len_selection=${#selection[@]}
        if [ $len_selection -eq 1 ]
        then
                case ${selection[0]} in
                        "FastQC-查看fastq文件质量")
                                download_Fastqc
                                Fastqc ;;
                        "Trimmatic-fastq文件质控")
                                trimmatic ;;
                        "Bwa-fastq文件回帖")
                                bwa ;;
                        "GATK-Call VCF")
                                Gatk ;;
                        "EXIT")
                                break ;;
                        *)
                                zenity --info "Sorry,invalid selection!"
                esac

        fi
done

运行wgs(./wgs或bash wgs),结果如下:


主列表框
2021-08-09 16-32-28 的屏幕截图.png
2021-08-09 16-32-35 的屏幕截图.png
2021-08-09 16-32-42 的屏幕截图.png
2021-08-09 16-33-06 的屏幕截图.png

文件还没有写完,现在支持单选功能,其他部分也没有写完。后面接续学习,再补充。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容