select与shell脚本交互界面
在shell 脚本执行过程中,经常会用到需要自我判读的人机交互的界面。而常用的交互界面有以下几种情况:
1、入参检查,$#是入参数量;$1,$2分别表示第一和第二个入参,以此类推;$0表示命令名称。这种一般会用于参数不足提示帮助信息的情况。
2、read读取用户输入的字符串,可以带提示信息。一般用于交互时将获取的值斌值给变量。
3、选择界面用select实现。
一、入参检查
示例代码如下,在输出参数不足时,会提示参数不等于2。当参数1长度为0时,会有其他提示。
1num_args=2
2if [ $# -ne $num_args ] #"$#"是入参的数量,此处检查入参是否是2个
3then
4 echo "usage: 'basename $0' args not eq 2"
5 exit 1
6fi
7if [ -z "$1" ] #检查是否输入了入参
8then
9 echo "usage: 'basename $0' rpm-file"
10 exit 2
11fi
二、read变量值获取
打印提示信息,要求在5秒内输入,超时不输入会自动跳出该过程。
1read -p "Please input your name:" -t 5 name
三、select选择界面
shell脚本有一个很好的选择界面方式,用select实现。示例代码如下:
1OPTIONS="Hello Quit"
2select opt in $OPTIONS;do
3if [ "$opt" = "Quit" ];then
4 echo done
5 exit
6elif [ "$opt" = "Hello" ];then
7 echo Hello World
8else
9 echo bad option
10fi
11done
执行过程如下:
1[root@361way tmp]# sh select.sh
21) Hello
32) Quit
4#? 1
5Hello World
6#? 2
7done
注:由于quit选项中有exit动作,所以会退出,如果选择其他项则永远不会退出(ctrl +c 除外)。
四、select的便利
例如如下一段脚本:
1#!/bin/bash
2PS3="Run command:"
3clear
4select choice in date w hostname "uname -r" "exit"
5do
6 $choice
7done
如果改用case语句处理,就需要这样写了:
1#!/bin/bash
2PS3="Run command:"
3clear
4for choice in date w hostname "uname -r" Exit
5do
6case $choice in
7 date)
8 $choice
9 ;;
10 w)
11 $choice
12 ;;
13 "uname -r")
14 $choice
15 ;;
16 hostname)
17 $choice
18 ;;
19 Exit)
20 echo "Bye!"
21 exit 0
22 ;;
23esac
24done
可以看出,在简洁性上select要简便的多。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/shell-select-options/4968.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.