Bash脚本错误

时间:2014-04-03 00:40:18

标签: linux bash shell

我正在尝试运行这些脚本,但我一直收到错误消息:

1 -

#!/bin/bash

filename=$1


if [ -f $filename ]
then
    owner=`stat -c %U $filename`
    grep $owner /etc/passwd
    if [ $? -eq 0 ]; then
            perm=`stat -c %a $filename | head -c 1`
            if [ $perm -gt 3 ]; then
                cat $filename | grep NOTE
            fi
        fi
fi

错误信息是:

  

stat:缺少操作数尝试`stat --help'获取更多信息。


2-

#!/bin/bash

NoSum=$1
sum=0
echo "Please enter $NoSum values one at a time"
for (( i=1; i<=$NoSum; i++ ))
do
    echo "Next Value?"
    read num
    let "a = $sum + $num"
    sum=$a
done

echo "The sum is : $sum"

错误信息是:

  

请一次输入一个值./scr3:第6行:((:i&lt; =:syntax   错误:操作数预期(错误标记为“&lt; =”)总和为:0


3-

#!/bin/bash

dir=$1

if [ -d $dir ]
    then
    perm=`stat -c %a $dir | head -c 1`
    if [ $perm -gt 5 ]; then
        cd $dir
        for file in $dir/*
        do
            if ! [ -x "$file" ]
            then
                echo "$file"
            fi
        done
    fi
fi

错误信息是:

  

stat:缺少操作数尝试`stat --help'获取更多信息。 ./scr4:   第8行:[: - gt:一元运算符预期


任何想法如何修复它们?

2 个答案:

答案 0 :(得分:1)

程序没有错。你没有提供命令行参数。你必须将它作为

运行

1和3:

./script.sh <filename>

2:

./script.sh <number>

$1代表第一个命令行参数

答案 1 :(得分:0)

您需要在bash中引用变量,以防止在test方括号[]中出现分词问题,并且大部分时间都用于其他用途。

所以你的第一个脚本将是

#!/bin/bash

filename="$1"


if [ -f "$filename" ]
then
    owner="`stat -c %U "$filename"`"
    grep "$owner" /etc/passwd
    if [ $? -eq 0 ]; then
            perm="`stat -c %a "$filename" | head -c 1`"
            if [ "$perm" -gt 3 ]; then
                cat "$filename" | grep NOTE
            fi
    fi
fi

其他人有类似的错误