select与shell脚本交互界面

在shell 脚本执行过程中,经常会用到需要自我判读的人机交互的界面。而常用的交互界面有以下几种情况:



1、入参检查,#是入参数量;1,2分别表示第一和第二个入参,以此类推;0表示命令名称。这种一般会用于参数不足提示帮助信息的情况。



2、read读取用户输入的字符串,可以带提示信息。一般用于交互时将获取的值斌值给变量。



3、选择界面用select实现。

一、入参检查

示例代码如下,在输出参数不足时,会提示参数不等于2。当参数1长度为0时,会有其他提示。
num_args=2
if [ # -nenum_args ]                      #"#"是入参的数量,此处检查入参是否是2个
then
  echo "usage: 'basename0' args not eq 2"
  exit 1
fi
if [ -z "1" ]                                          #检查是否输入了入参
then
   echo "usage: 'basename0' rpm-file"
   exit 2
fi

二、read变量值获取

打印提示信息,要求在5秒内输入,超时不输入会自动跳出该过程。
read -p "Please input your name:" -t 5 name

三、select选择界面

shell脚本有一个很好的选择界面方式,用select实现。示例代码如下:



<br />
OPTIONS="Hello Quit"
select opt in OPTIONS;do
if [ "opt" = "Quit" ];then
  echo done
  exit
elif [ "$opt" = "Hello" ];then
  echo Hello World
else
  echo bad option
fi
done
执行过程如下:



<br />
[root@361way tmp]# sh select.sh
1) Hello
2) Quit
#? 1
Hello World
#? 2
done
注:<span style="color:#E53333;">由于quit选项中有exit动作,所以会退出,如果选择其他项则永远不会退出(ctrl +c 除外</span>)。

四、select的便利

例如如下一段脚本:



<br />
#!/bin/bash
PS3="Run command:"
clear
select choice in date w hostname "uname -r" "exit"
do
    $choice
done
如果改用case语句处理,就需要这样写了:



<br />
#!/bin/bash
PS3="Run command:"
clear
for  choice in date w hostname "uname -r" Exit
do
case choice in
    date)choice
    ;;
    w)
    choice
    ;;
    "uname -r")choice
    ;;
    hostname)
    $choice
    ;;
    Exit)
    echo "Bye!"
    exit 0
    ;;
esac
done
可以看出,在简洁性上select要简便的多。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注