Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Bash脚本编写一般问题(条件和变量传递)_Macos_Bash - Fatal编程技术网

Macos Bash脚本编写一般问题(条件和变量传递)

Macos Bash脚本编写一般问题(条件和变量传递),macos,bash,Macos,Bash,我对bash脚本比较陌生,而谷歌在这方面并没有我想象的那么有用。我只是在我的.bash_配置文件中玩一个小密码输入程序,它有如下功能: read PASSWORD if $PASSWORD != 'pass'; then echo "wrong. exiting" exit fi 不幸的是,这不起作用。我得到了这些错误(达尔文10.6版) 编辑对此帖子表示抱歉。我的浏览器崩溃了,我甚至没有意识到这一点。最后我自己弄明白了——再次抱歉。但是谢谢你的回答 试试看: read PAS

我对bash脚本比较陌生,而谷歌在这方面并没有我想象的那么有用。我只是在我的.bash_配置文件中玩一个小密码输入程序,它有如下功能:

read PASSWORD
if $PASSWORD != 'pass'; then
    echo "wrong. exiting"
    exit
fi
不幸的是,这不起作用。我得到了这些错误(达尔文10.6版)

编辑对此帖子表示抱歉。我的浏览器崩溃了,我甚至没有意识到这一点。最后我自己弄明白了——再次抱歉。但是谢谢你的回答

试试看:

read PASSWORD
if [ "x$PASSWORD" != "xpass" ] ; then
   echo "Wrong. Exiting."
   exit 1
fi
exit 0

您缺少方括号。if行应为:

如果[$PASSWORD!=“pass”];然后

或者更好:

如果[“$PASSWORD”!=“pass”];然后


如果$PASSWORD为空,这将避免失败。

您可能想了解
读取
命令的两个选项:

-p string
显示不带尾随换行符的提示

静音模式。用户键入的字符不会回显到屏幕上

因此,提示输入密码时,您可以执行以下操作:

read -sp "Please enter your password: " PASSWORD
echo

是一个很好的资源

用例/esac构造

read -p "enter: " PASSWORD
case "$PASSWORD" in
    "pass") echo "ok;;
    * ) echo "not ok";;
esac
编辑:丹尼斯的QN

x=10
y=5
z=1
options=3
expression="$((x> y)) $((y> z)) $((options<=4))"
case "$expression" in
   "1 1 1")
    echo "x > y and y>z and options <=4";;
    *) echo "Not valid";;
esac
x=10
y=5
z=1
选项=3

expression=“$((x>y))$((y>z))$((选项y和y>z以及引号中的选项完成了“x”的预期任务。除非您使用的是需要该技巧的旧shell,否则最好不要使用“x”。在某个时候,我习惯于添加该选项,以确保它工作正常,现在它已自动添加;-)。如果您正在编写特定于Bash的脚本,最好了解
[
[[
之间的区别,这两种脚本提供了额外的功能。请参阅,谢谢!谢谢你们两个(以及你们所有人!)感谢指向Greg的Wiki的链接!当使用简单的If/then/[else]时,为什么要使用
案例
够了吗?因为我不想关心比较运算符!=或==或其他什么。原谅我,但我不明白这意味着什么。好吧,让我再问你一次,我为什么要使用if/else?我觉得使用case/esac很舒服,对我来说,它更整洁。好吧,“整洁”是一个有效的意见基础。你会怎么做
if[[$x>$y&&$y>$z&&$options
x=10
y=5
z=1
options=3
expression="$((x> y)) $((y> z)) $((options<=4))"
case "$expression" in
   "1 1 1")
    echo "x > y and y>z and options <=4";;
    *) echo "Not valid";;
esac