【问题标题】:Shell Script check for no input and set the variableShell 脚本检查无输入并设置变量
【发布时间】:2015-05-12 22:59:33
【问题描述】:

我在使用 bash 脚本时遇到了问题。我希望用户说明用户名,如果未设置,则自动将其设置为 root。

#!/bin/bash
printf "MySQL User: (root)"
read MYSQLUSER
if [[ "$MYSQLUSER" == "" ]]; then
    set MYSQLUSER = "root"
fi

我尝试了各种语法和 shell,但 if 语句总是被忽略。这应该在 Mac 上运行。感谢您的帮助!

【问题讨论】:

  • if 声明很好。不过,您的 set 行不正确。这不是 bash 变量赋值。你想要MYSQLUSER=root 那里。但也有其他方法可以做到这一点。有关此用法的标准习语的问题,请参阅stackoverflow.com/q/7444504/258523
  • 另外,-z 选项检查零长度。 if [[ -z "$MYSQLUSER" ]] 也可以。

标签: bash shell


【解决方案1】:

只需使用:

your_var=${MYSQLUSER:-root}

${var:-$DEFAULT} 表示:如果 var 未设置或为空,则将表达式计算为 $DEFAULT *


总的来说,我会将脚本重写为:

#!/bin/bash
printf "MySQL User: (root) "
read MYSQLUSER
MYSQLUSER=${MYSQLUSER:-root}
echo "mysqluser: $MYSQLUSER"

查看不同行为的执行情况:

$ ./a.sh 
MySQL User: (root)              #just pressed intro
mysqluser: root
$ ./a.sh 
MySQL User: (root) hello        #I wrote 'hello'
mysqluser: hello

【讨论】:

  • 你知道{:-}{:=}有什么区别吗?
  • 它要么是普通人的笑脸,要么是大鼻子的:D 另外,从gnu.org/software/bash/manual/html_node/…= 有一些额外的条件:位置参数和特殊参数可能不会以这种方式分配给。
  • 笑容也很诡异 :) 链接指向 404!
  • 呃,后面有个逗号,固定@JID!
  • Fedorqui,我意识到了不同之处,不确定是不是你说的。似乎${var:-$new} 使用 new 而不是 var 来调用任何命令,但 var 将保持为空,而 ${var:=$new} 将使 var 永久等于 new。
【解决方案2】:

一个常见的习惯是使用命令

: ${MYSQLUSR:=root}

如果 root 还没有非空值,则将值分配给 MYSQLUSER

: 是什么都不做的命令;参数被计算,然后被忽略。实际上是 := 扩展的计算设置了 MYSQLUSER 的值。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2020-12-05
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2017-09-24
    相关资源
    最近更新 更多