Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux Can';找不到意外的运算符(Bash错误)_Linux_Bash_Unix - Fatal编程技术网

Linux Can';找不到意外的运算符(Bash错误)

Linux Can';找不到意外的运算符(Bash错误),linux,bash,unix,Linux,Bash,Unix,我已经创建了一个简单的Bash脚本,它应该从输入的目录路径在/usr/local/{etc,lib,include…}中创建符号链接 #!/bin/sh input="$1" for subdir in "etc include bin lib man share sbin"; do dir=$input/$subdir if [ -e $dir ] && [ -d $dir ]; then for file in $dir/*; do

我已经创建了一个简单的Bash脚本,它应该从输入的目录路径在/usr/local/{etc,lib,include…}中创建符号链接

#!/bin/sh

input="$1"
for subdir in "etc include bin lib man share sbin"; do
   dir=$input/$subdir
   if [ -e $dir ] && [ -d $dir ]; then
      for file in $dir/*; do
         ln -s $file /usr/local/$subdir
      done
   fi
done
我得到的错误是:

user@comp:/usr/local# ./update-locallinks /usr/local/test/
[: 6: /usr/local/test/etc: unexpected operator
这就是/usr/local/test/的样子:

user@comp:/usr/local# ls /usr/local/test/
bin
etc
include
lib

在测试表达式中始终使用双引号保护bash变量:

   if [ -e "$dir" ] && [ -d "$dir" ]; then
为什么引用这些话?改为:

for subdir in etc include bin lib man share sbin; do

否则,
$dir
将在第一次(也是唯一一次)迭代中包含
etc include bin…

我不确定,但请尝试dir=“$input/$subdir”而不是dir=$input/$subdirdd a
将-x
设置到第二行并粘贴output@Troydm,我试过了,没用,不过还是谢谢你!顺便说一句,事实上,这不是一个问题,但包含了一堆与问题无关的代码,这意味着我不能向其他人指出同样的直接问题,而不要求他们挖掘所有与问题本身无关的部分。今后,请尽量使问题中包含的代码成为产生相同错误的最短示例。(此外,这个shell实际上不是bash;
/bin/sh
是POSIX sh——即使它链接到bash shell,当在
sh
名称下调用时,它也以兼容模式运行,并且不提供完整的
bash
语言)。尽管这并没有解决“意外运算符”错误这将是我的下一个错误,所以谢谢!这确实有帮助!@xenagi:它也解决了这个错误,除非您输入一个有空格的路径,在这种情况下,
ln
调用也会失败(即使您在测试表达式中引用了vars)-e是不必要的,
如果[-d“$dir”];那么
就足够了。
for subdir in etc include bin lib man share sbin; do