dialog是个linux命令行的ui显示工具,可以在命令行显示更加友好的用户界面,系统如果没有安装需要手工安装:
sudo apt-get install dialog
以下是在命令显示表单的示例:
#!/bin/bash
# 表单各字段的默认值
shell="bash"
groups="1"
user="hello"
home="/home/hello"
# Store data to $VALUES variable
VALUES=$(dialog --ok-label "Submit" \
--backtitle "Linux User Managment" \
--title "Useradd" \
--form "Create a new user" 15 50 0 \
"Username:" 1 1 "$user" 1 10 10 0 \
"Shell:" 2 1 "$shell" 2 10 15 0 \
"Group:" 3 1 "$groups" 3 10 8 0 \
"HOME:" 4 1 "$home" 4 10 40 0 \
3>&1 1>&2 2>&3)
# 显示输入的字段值,如果没改变则输出默认值
echo "$VALUES"
看看执行效果吧:
上面的示例将对话框中输入值以字符串形式存储到VALUES
变量中,如果其中某个字段为空,可就无法区分了。如何解决这个问题呢?
其实上面的例子dialog中所有的表单输出都重定义到了3这个句柄中,可以使用sed命令顺序读取dialog的输出,示例如下:
#!/bin/bash
# 数据库连接参数默认值
database_jdbc_host=localhost
database_jdbc_port=3306
database_jdbc_username=root
database_jdbc_password=
database_jdbc_schema=test
# Store data to $values variable
values=$(dialog --cancel-label "返回" \
--backtitle "$DEFAULT_BACK_TITLE" \
--title "数据库连接参数" \
--form "请输入数据连接的参数:" 15 60 0 \
"主机名(host):" 1 1 "$database_jdbc_host" 1 20 30 0 \
"端口号(port):" 2 1 "$database_jdbc_port" 2 20 30 0 \
"用户名(user):" 3 1 "$database_jdbc_username" 3 20 30 0 \
"密码(password):" 4 1 "$database_jdbc_password" 4 20 30 0 \
"数据库名(schema):" 5 1 "$database_jdbc_schema" 5 20 30 0 \
3>&1 1>&2 2>&3)
database_jdbc_host=$(echo "$values" | sed -n 1p)
database_jdbc_port=$(echo "$values" | sed -n 2p)
database_jdbc_username=$(echo "$values" | sed -n 3p)
database_jdbc_password=$(echo "$v" | sed -n 4p)
database_jdbc_schema=$(echo "$values" | sed -n 5p)
echo database_jdbc_host=$database_jdbc_host
echo database_jdbc_port=$database_jdbc_port
echo database_jdbc_username=$database_jdbc_username
echo database_jdbc_password=$database_jdbc_password
echo database_jdbc_schema=$database_jdbc_schema
参考资料:
https://stackoverflow.com/questions/30245008/bash-shell-scripting-dialog-form-variables