Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
bash脚本:[:==:预期使用一元运算符,尽管我几乎可以肯定我的条件语法是正确的_Bash_Unix - Fatal编程技术网

bash脚本:[:==:预期使用一元运算符,尽管我几乎可以肯定我的条件语法是正确的

bash脚本:[:==:预期使用一元运算符,尽管我几乎可以肯定我的条件语法是正确的,bash,unix,Bash,Unix,大家好,我似乎被脚本中的“elif[$1==0]”部分卡住了 此条件语句的目的是在用户未向我的脚本传递参数时退出 (如果用户只是运行“sh safe_rm”而不是预期行为的“sh safe_rm filename”) 我仍然处于这个脚本的早期阶段,所以到目前为止它没有做任何事情,但是我想先把条件排除在外,但是我无法找出我对elif[$1==0]做了什么错误。我还尝试了elif[$1-eq 0]和elif[$1==''',但它们似乎都不起作用 # This checks whether th

大家好,我似乎被脚本中的“elif[$1==0]”部分卡住了

此条件语句的目的是在用户未向我的脚本传递参数时退出

(如果用户只是运行“sh safe_rm”而不是预期行为的“sh safe_rm filename”)

我仍然处于这个脚本的早期阶段,所以到目前为止它没有做任何事情,但是我想先把条件排除在外,但是我无法找出我对elif[$1==0]做了什么错误。我还尝试了elif[$1-eq 0]和elif[$1==''',但它们似乎都不起作用

   # This checks whether the  $HOME/deleted/ exists. If it does not exist, it will get created. If it exists, nothing happens.
if [ ! -d $HOME/deleted/ ]
        then
                echo "/deleted/ directory does not exist. Creating it..."
                mkdir $HOME/deleted/
        else
        echo "Directory /Deleted/ already exists. Continuing..."
fi
# The conditional statements below check if the argument passed is a directory, or if it does not exist, or if nothing has been passed.
# All 3 cases will cause the program to quit since there is nothing to be done. The user needs to provide a file that exists.
if [ ! -e $1 ]
        then
                echo "File does not exist!"
                exit 1
elif [ $1 == 0 ]   #<---problem here I have also tried elif [ $1 -eq 0 ] and elif [ $1 == '' ]
        then
                echo "No filename has been provided!"
                exit 1
elif [ -d $1 ]
        then
                echo "This is a directory, not a file!"
                exit 1
elif [ $1 == 'safe_rm' ]
        then
                echo "Attempting to delete safe_rm. Operation aborted."
                exit 1
fi
#检查$HOME/deleted/是否存在。如果它不存在,将创建它。如果它存在,则不会发生任何事情。
如果[!-d$HOME/已删除/]
然后
echo“/已删除/目录不存在。正在创建它…”
mkdir$HOME/已删除/
其他的
echo“目录/已删除/已存在。继续…”
fi
#下面的条件语句检查传递的参数是否为目录,或者是否不存在,或者是否未传递任何内容。
#所有3种情况都将导致程序退出,因为无需执行任何操作。用户需要提供一个存在的文件。
如果[!-e$1]
然后
echo“文件不存在!”
出口1

elif[$1==0]#要测试用户是否未传递任何参数,语句应为:

...
elif [ $# -eq 0 ]
...

要测试用户是否未传递任何参数,语句应为:

...
elif [ $# -eq 0 ]
...

您应该引用您的参数。在您的情况下,如果未设置
$1
,测试将扩展到
[==0]
,这在语法上是不正确的

然而,
[“$1”==0]
将解析为
[”“==0]
,语法正确,返回false


显然这仍然不是您想要的,但jlliagre的回答提供了这一点。

您应该引用您的参数。在您的情况下,如果未设置
$1
,测试将扩展到
[==0]
,这在语法上是不正确的

然而,
[“$1”==0]
将解析为
[”“==0]
,语法正确,返回false



显然,这仍然不是您想要的,但jlliagre的回答提供了这一点。

[
没有
==
运算符,-eq是算术运算符,因此无法处理文件名。请显示您程序的输入和输出。我最初尝试过[$1-eq 0]但这是同一个错误,所以我开始尝试不同的方法以使其无效
$1
应该是什么,你确定它有值吗?$1是用户传递给我脚本的参数。它应该是要删除的文件名。我已经能够在用户提供目录而不是文件的情况下成功地测试它,或者,如果用户提供了一个不存在的文件,或者即使用户试图将我自己的脚本作为文件名传递给要删除的文件名
man test
,以查看所有可以使用
[
进行测试的内容。它们包括
-d
-f
。引用变量;不带参数,
“$1“
是一个空字符串,而
$1
不提供任何测试。
[
没有
=
运算符,-eq是一个算术运算符,因此无法处理文件名。请显示程序的输入和输出。我最初尝试过[$1-eq 0]但这是同一个错误,所以我开始尝试不同的方法以使其无效
$1
应该是什么,你确定它有值吗?$1是用户传递给我脚本的参数。它应该是要删除的文件名。我已经能够在用户提供目录而不是文件的情况下成功地测试它,或者,如果用户提供了一个不存在的文件,或者即使用户试图将我自己的脚本作为文件名传递给要删除的文件名
man test
,以查看所有可以使用
[
进行测试的内容。它们包括
-d
-f
。引用变量;不带参数,
“$1”
是一个空字符串,而
$1
不提供任何测试。对于bash,使用
[[]]]
也将是一个选项。作为一个内置的,它“知道”关于
$1
,即使它是空的。对于bash,使用
[[[]]
也将是一个选项。作为一个内置的,它“知道”关于
$1
即使结果是空的。即使使用elif[$1-eq 0],我也会得到相同的错误。我已经尝试过elif[$1-eq 0]、elif[$1==0]和elif[$1==0],但没有成功:没关系。我可以使用“elif[-z$1]来解决这个问题这正确地给了我我想要的结果wanted@stfudonny你误读了我的回答,我没有使用
$1
,而是使用
$#
。前者是第一个参数,后者是参数的数量。
-z$1
不是检查是否未传递参数的最佳方法。很抱歉,我不知道$#是什么。谢谢你让我知道!。。。甚至
elif(($#==0))
即使使用elif[$1-eq 0]我也会遇到同样的错误。我已经尝试过elif[$1-eq 0]、elif[$1==0]和elif[$1=''']但没有成功:没关系。我能够通过使用“elif[-z$1]来解决这个问题这正确地给了我我想要的结果wanted@stfudonny你误读了我的回答,我没有使用
$1
,而是使用
$#
。前者是第一个参数,后者是参数的数量。
-z$1
不是检查是否未传递参数的最佳方法。很抱歉,我不知道$#是什么。谢谢你让我知道!。。。甚至
elif($#==0))