Linux Bash脚本错误
我正在尝试运行这些脚本,但不断收到错误消息: 一,- 错误消息是: stat:缺少操作数有关详细信息,请尝试“stat--help”Linux Bash脚本错误,linux,bash,shell,Linux,Bash,Shell,我正在尝试运行这些脚本,但不断收到错误消息: 一,- 错误消息是: stat:缺少操作数有关详细信息,请尝试“stat--help” 2- 错误消息是: stat:缺少操作数有关详细信息,请尝试“stat--help”/scr4: 第8行:[:-gt:应为一元运算符 知道如何修复它们吗?您需要在bash中引用变量,以防止出现分词问题,无论是在test方括号中还是在大多数情况下在其他用途中 所以你的第一个剧本是 #!/bin/bash filename="$1" if [ -f "$fi
2- 错误消息是: stat:缺少操作数有关详细信息,请尝试“stat--help”/scr4: 第8行:[:-gt:应为一元运算符
知道如何修复它们吗?您需要在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
其他程序也有类似的错误程序没有任何问题。您没有提供命令行参数。您必须以 1和3:
./script.sh <filename>
/script.sh
2:
/script.sh
$1
代表第一个命令行参数两个技巧(不能解决您的问题)——不要使用反勾号'stat-c%U$filename',而是使用较新的$()
符号$(stat-c%U$filename)
消除嵌套问题——在vars上使用大括号$dir
-->${dir<>代码>考虑<代码> a= $((和+num))<代码> vs>代码>让“A= $SUM +$NUM/代码> @ StPANPP好第一个建议,但不要认为第二个有任何好处,除非你特别喜欢语法或做一些类似于<代码>”${Value}字符串“< /Cord>好建议”,但要“看”“您的问题是,学习使用shell调试/跟踪选项、set-vx(开)
、和set+vx(关)
。这将打印要执行的代码,然后在前面加上+
的第二行显示实际运行的命令,并用值替换变量名。虽然/Until/for循环和嵌套结构一开始可能会让人感到困惑,但请关注+
'd行的结果。同时添加导出PS4='${LINENO}+>
将向您显示当前正在执行的脚本的行号。祝您好运。@BroSlow@hedder-Good points,我经常使用[+|-]vx。我确实使用了${var}字符串
,为了保持一致性,我现在总是使用${var}
form,即使后面没有字符串。@user3357669如果它解决了问题,您应该接受这个答案,尽管如果您有权限,我仍然会更改脚本,因为它们在很多情况下都会失败。
#!/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
#!/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
./script.sh <filename>
./script.sh <number>