shell脚本:if语句

duk*_*vin 6 bash shell if-statement

我在这里按照教程:http://bash.cyberciti.biz/guide/If..else..fi#Number_Testing_Script

我的脚本看起来像:

lines=`wc -l $var/customize/script.php`
if test $lines -le 10
then
    echo "script has less than 10 lines"
else
    echo "script has more than 10 lines"
fi
Run Code Online (Sandbox Code Playgroud)

但我的输出看起来像:

./boot.sh: line 33: test: too many arguments
script has more than 10 lines
Run Code Online (Sandbox Code Playgroud)

为什么说我有太多的论点?我没有看到我的脚本与教程中的脚本有何不同.

kev*_*kev 10

wc -l file命令会打印两个单词.试试这个:

lines=`wc -l file | awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)

要调试bash脚本(boot.sh),您可以:

$ bash -x ./boot.sh
Run Code Online (Sandbox Code Playgroud)

它将打印每一行执行.


mvd*_*vds 8

wc -l file
Run Code Online (Sandbox Code Playgroud)

输出

1234 file
Run Code Online (Sandbox Code Playgroud)

使用

lines=`wc -l < file`
Run Code Online (Sandbox Code Playgroud)

只获得行数.此外,有些人更喜欢这种符号而不是反引号:

lines=$(wc -l < file)
Run Code Online (Sandbox Code Playgroud)

此外,因为我们不知道是否$var包含空格,并且文件是否存在:

fn="$var/customize/script.php"
if test ! -f "$fn"
then
    echo file not found: $fn
elif test $(wc -l < "$fn") -le 10
then
    echo less than 11 lines
else
    echo more than 10 lines
fi
Run Code Online (Sandbox Code Playgroud)