美文网首页教育linux shell
02 图形化界面中的shell 编程

02 图形化界面中的shell 编程

作者: 123678 | 来源:发表于2021-08-09 22:38 被阅读0次

    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

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

    相关文章

      网友评论

        本文标题:02 图形化界面中的shell 编程

        本文链接:https://www.haomeiwen.com/subject/ftuovltx.html