Linux Can';找不到意外的运算符(Bash错误)
我已经创建了一个简单的Bash脚本,它应该从输入的目录路径在/usr/local/{etc,lib,include…}中创建符号链接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
#!/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