gpt4 book ai didi

linux - 参数未传递给 shell 脚本 copyfile.sh : 1: copyfile. sh: [d: 未找到

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:50 27 4
gpt4 key购买 nike

我正在尝试将一个简单的参数传递给 shell 脚本。这是脚本:

if ["$1" == "d"]; then

if ["$2" == NULL]; then
echo "Please enter the local location of the files"
else
LOCAL = $2
scp -r -i ~/Dropbox/Business/aws/first.pem $LOCAL ubuntu@XX.XX.194.202:~/test/
fi

else
scp -r -i ~/Dropbox/Business/aws/first.pem ~/Dropbox/Business/aws/files/binaryhustle/ ubuntu@XX.XX.194.202:~/test/
fi

我输入:sh copyfile.sh d 我得到的错误是 copyfile.sh: 1: copyfile.sh: [d: not found

最佳答案

由于您使用的是双等号 (==),我可以假设您使用的是像 Bash 这样的高级 shell。对于普通的 shell,您只能使用一个 = 例如

if [ "$1" = d ]; then

对于上面的代码,将"$1"=d]看成3个独立的[ 的参数就像任何其他命令一样,因此需要空格来分隔它们。如果您执行了 ["$1" ,这就像尝试运行 "[$1" 一样。只有 if 所做的是根据它前面的命令的结果来决定脚本的流程,而 [ 通常可以返回 0(成功/真) 或 1(失败/错误)。

实际上相当于:

if test "$1" = d; then

此外,shell 脚本中没有 NULL 关键字。您必须与空字符串进行比较

        if [ "$2" = '' ]; then

或者使用-z:

        if [ -z "$2" ]; then

对于 bash,推荐使用 [[ ]]。这是一种特殊的语法,不像'['或'test'那样像其他命令一样执行。在更高的层次上解释得更多一些。有了它,即使不引用变量,参数也不会受到路径名扩展或分词的影响。

if [[ $1 == d ]]; then

if [[ -z $2 ]]; then

尽管我仍然建议为带有变量的文字字符串引用第二个参数,以防止由于每个版本(可能是旧版本)的 bash 实现不同而导致重新解释。

[[ $var == "$xyz" ]]

而且你不能在作业上放置空格:

        LOCAL=$2

用变量引用你的论点总是一个好主意,以防止 word splittingpathname expansion .

        scp -r -i ~/Dropbox/Business/aws/first.pem "$LOCAL" ubuntu@XX.XX.194.202:~/test/

关于linux - 参数未传递给 shell 脚本 copyfile.sh : 1: copyfile. sh: [d: 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com