shell - 检查一个变量是否在 ksh 中设置和值

标签 shell ksh

我有一个接受用户输入的脚本,REFRESH 选项是可选的。我需要测试 $REFRESH 是否存在并且等于字符串“REFRESH”,如果它运行特定的代码块。

用户将执行

./export_data.sh <user> <type> [REFRESH]

如果我在 PHP 中执行此操作,我只需使用 isset() 函数,ksh 中是否存在等效项?

我尝试了以下方法,但这失败了,因为在第二次测试中 $REFRESH 未设置:
if [ -n $REFRESH ] && [ $REFRESH == "REFRESH" ]
then
    echo "variable is set and the expected value";
    # do stuff
fi

我能想到的唯一另一种方法是嵌套 if 但这似乎很乱:
if [ -n $REFRESH ]
then
    if [ $REFRESH == "REFRESH" ]
    then
        echo "variable is set and the expected value";
        # do stuff
fi

有一个更好的方法吗?

最佳答案

if [ "${REFRESH:-unset}" = "REFRESH" ]
then ...

这替代了unset如果 $REFRESH 中没有值或者如果值是空字符串。无论哪种方式,它都与“REFRESH”不同,因此它按要求行事。

测试变量时,用双引号括起来;它可以节省焦虑。实际上,这意味着您可以简单地编写:
if [ "$REFRESH" = "REFRESH" ]
then ...

关于shell - 检查一个变量是否在 ksh 中设置和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792759/

相关文章:

linux - 使用 `sh -cx` 导出脚本变量

java - ssh后在bash脚本中运行两个java程序

linux - 在 bash 脚本中解析 .kml 文件

linux - 如何在 emacs 中生成 *shell* 缓冲区?

shell - 为什么 ksh88 和 ksh93 允许未封闭的反引号?

linux - 如何在 ksh 中编写脚本以删除记录列表中的最后一条记录?

mysql - 从 shell 脚本处理 mysql 查询中的星号 * 条目

linux - 如何从 LINUX 脚本向网站发送输入

string - 在 Bash 中从末尾提取子字符串

linux - 返回小于给定日期的月结束日期,并在 shell 中停止于 12 个日期