我编写了一个简单的shell脚本来完成一些自动化工作。基本上,脚本会搜索当前路径中的所有文件,如果文件是指定的文件,则会执行一些操作。 以下是相关的行---
#!/bin/bash
for i in `ls *`
do
if [$i =="ls.sh"]
then .... //do something
fi
done
然而,第3行中的字符串比较不起作用,我在运行脚本时得到了这个 -
./ls.sh: line 3: [scripth.sh: command not found
./ls.sh: line 3: [scripth.sh~: command not found
./ls.sh: line 3: [test.sh: command not found
要做的更正是什么?
答案 0 :(得分:3)
首先,不要那样使用ls
。如果您的文件有空格,它将会疯狂!
使用shell扩展。然后,您可以使用case/esac
进行字符串比较。 (或if if else)
for file in *
do
case "$file" in
"ls.sh" ) echo "do something"
;;
esac
done
答案 1 :(得分:2)
有几个问题。
在第1行中,你没有按照自己的想法行事。你应该在ls *:
附近加一个反引号for i in `ls *`
将遍历当前目录中列出的所有文件。你的行不会运行任何命令,而是使用*来获取所有文件,你的列表将在前面包含一个单词“ls”。
从命令行尝试:
echo ls *
echo `ls *`
您可能只想这样做:
for i in *
第二个问题。在方括号内放置空格:
[ $i == "ls.sh" ]
空间是必要的。
第三个问题。使用one =进行字符串比较
[ $i = "ls.sh" ]
答案 2 :(得分:1)
使用:if [ "$i" = "ls.sh" ]
- 注意空格。
答案 3 :(得分:0)
您没有在==
之后添加空格,因此您的代码应该是:
#!/bin/bash
for i in `ls *`
do
if [ $i == "ls.sh" ]
then
//do something
fi
done
答案 4 :(得分:0)
如果您只想检查文件的现有文件,可以直接在shell中执行。
if [ -e ls.sh ]
then
# ... do something
fi