考虑以下三个bash脚本:
没有语法错误的脚本-执行时没有错误,正如预期的那样,循环“这是结束:-1":
#!/bin/bash
while true ; do
x=1 # or, read the variable from some external source
y=2 # or, read the variable from some external source
z=$(( $x - $y ))
echo "this is the result: $z"
sleep 1
done
执行-无限循环,直到我们
当为第一个参数提供/bin/true时,下面的shell脚本执行得很好,但是如果在执行过程中出现语法错误,则可能会失败!
#!/bin/sh
if $1 ; then exit; fi
/tmp/asdf <<< ASDF # Something with syntax error in POSIX
当然有些语法错误(如果不是全部的话?)通过静态检查可以避免吗?如何静态地检查给定的 脚本在语法上是否有效?
编辑:检查Bash脚本中的语法错误已经在中得到了回答。
编辑#2:注意到,即使在使用+B和--posix标志以及-n执行时,也要正确检查语法是否符合POSIX。
我正在尝试设置一个简单的bash脚本,以检查是否有错误消息出现在日志中,如果错误消息“重置适配器”出现在日志中,服务器应该发送电子邮件给我们。每当我运行下面的脚本时,我都会遇到"Bash Script.sh:第4行:语法错误:文件的意外结束“
if fgrep 'reset adapter' /var/log/messages.log then
mail -s 'Flapping ethernet' alerts@OurAlertBoard.com
fi
有什么想法吗?
更新:
添加建议;在“那么”之前,仍然得到相同的错误。新脚本:
我一直在编写一个bash脚本,以便在程序上运行测试,但我似乎找不到语法错误。当我使用-x时,它告诉我它需要一个},但我找不到它。
请看下面的代码。
#!/bin/bash
usagearg() {
echo "You're missing an argument on the command line!" >&2}
usagemiss() {
echo "A file requested in your filestem is missing or cannot be read!" >&2}
if [ ${#}
我从一个工作脚本中复制了一个简单的shell脚本。如果我把它复制粘贴到终端上,它就能工作:
if true
then
true
fi
但是,当我使用bash myscript运行脚本时,会出现各种语法错误,就好像缺少了一些关键字一样。
myscript: line 4: syntax error near unexpected token `fi',好像then不在那里。
myscript: line 6: syntax error: unexpected end of file,好像fi不在那里。
myscript: line 4: syntax error nea
今天我在写bash脚本时犯了一个小错误。以下代码
#!/bin/bash
if [ -n "${UNDEFINED_VAR}"]; then
echo 'string not empty'
echo "$UNDEFINED_VAR"
else
echo 'string empty'
fi
返回string not empty和空行。如果您仔细观察,我在上面代码中的]前面遗漏了一个空格。让我有点吃惊的是,bash愉快地运行我的代码,没有任何unexpected token (或其他)语法错误。另外,[[在大写中给
我在从Applescript中获得要执行的bash脚本时遇到问题。我需要的是Applescript文件提示输入用户名和密码,以便bash脚本使用sudo权限运行,因为它正在执行不能以管理员身份执行的任务,例如写入/etc/。
由于这个脚本(使用Platypus打包在.dmg文件中)将分发给许多用户,所以我不能依赖绝对路径,而是需要在运行Applescript文件时获取它的路径,获得sudo权限,并在同一个目录中运行bash脚本。
到目前为止,我所能想出的一切,通过So帖子和其他网站,都导致osascript抱怨它找不到bash脚本。有什么想法吗?
这似乎是可行的,但语法错误:
set wd t
#!/bin/bash
CURRENT=$(df -h / | grep / | awk '{ print $4}')
THRESHOLD=75
if (( "$CURRENT" >= "$THRESHOLD" )); then
mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" sss@abc.net << EOF
Your root partition remaining free space is cri
我正在尝试为Linux/Unix类编写一个简单的bash脚本,并且一直会出现语法错误。就连我的教授一眼也看不出来。
任何洞察力都将不胜感激!
pattersoncode:~ austen$ ./bash2
./bash2: line 3: if[ =0 ]: command not found
./bash2: line 4: syntax error near unexpected token `then'
./bash2: line 4: `then'
pattersoncode:~ austen$
致以敬意,
a=6
test $a -eq 6 > b
if[ &
我正在努力学习shell脚本,所以我创建了一个简单的脚本,它的循环没有任何作用:
#!/bin/bash
names=(test test2 test3 test4)
for name in ${names[@]}
do
#do something
done
但是,当我运行这个脚本时,我会得到以下错误:
./test.sh:第6行:未预料到的令牌已完成的语法错误
./test.sh:第6行:已完成
我错过了什么?shell脚本“选项卡敏感”吗?
我希望使用bash脚本运行mysql命令,但由于重音标记(`)而导致语法错误。
mysql -u root -p -e "GRANT ALL PRIVILEGES ON `testuser\_%` . * TO 'testuser'@'%';"
bash: testuser_%: command not found... Enter password: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corres
我正在尝试perl脚本中的代码,并且需要在bash中调用另一个文件。不确定,哪种方法是最好的?我可以使用system()直接调用它吗?请指导/给我示范一条路。
根据我到目前为止所做的尝试:
#!/usr/bin/perl
system("bash bashscript.sh");
Bash:
#!/bin/bash
echo "cdto codespace ..."
cd codetest
rm -rf cts
for sufix in a o exe ; do
echo ${sufix}
find . -depth -type f -nam
我正在尝试在Vagrant (vagrant ssh)中运行脚本,但是我得到了以下错误:
tests/unit/runTests.sh: 4: test/unit/runTests.sh:语法错误:"(“意外
命令: sh tests/unit/runTests.sh
对于流浪者来说,脚本在外面运行得很好,我所能找到的关于流浪者的唯一脚本信息都是与条款相关的,这不是我在这种情况下所做的。
脚本:
#!/bin/bash
i=0
fails=()
for d in tests/unit/*/ ; do
eval "vendor/bin/peridot -c tests/
我需要远程运行一个脚本。我正在使用下面的shell脚本
for server in $servers
do
LOCAL_VAR=<some_value>
ssh $server <<EOF
command1 $LOCAL_VAR
command2..
..
exit
EOF
done
bash显示意外的文件结尾语法错误。如果我删除这个块,代码的其余部分就可以正常工作。你能告诉我远程执行脚本的正确方法吗?
我正在尝试创建一个简单的bash脚本。(刚刚开始编写bash脚本)脚本很简单。rsyslog服务存在问题,有时会死机。我正在尝试编写一个脚本来检查服务是否死机,然后重新启动它,直到现在,我想检查我的条件是否正常,但似乎得到了一个错误。你能给我一些建议吗?
下面是脚本:
#!/bin/bash
a="dead"
b="running"
while i in $(/etc/init.d/rsyslog status | grep -o 'running\|dead');
do
if
[ "$a" == "$i" ];
有人能看一下我的剧本吗?我正试图使用bash脚本在文件中找到最长的行,所以我编写了以下代码。
#!/bin/bash
#Francesco Foschi length of a row in a file
let n=0
let max_length=0
while read row
do
length=$(echo -n $row | wc -c)
if[ ${#length} -gt ${#max_length} ]
then
let max_length=${#length}
fi
echo "$n row
我最近在我的一个Bash脚本中遇到了一个问题,这个问题是由它运行的某个SSH命令的意外输出引起的(由于操作系统版本升级)。这个问题实际上导致了一个Bash语法错误,因为我原本希望这个输出只包含一个数字状态码(来自远程脚本),然后在算术表达式中使用它。
然而,令我惊讶的是,我的Bash脚本在报告语法错误后继续执行。这一点,尽管我在文件开头附近有以下几行:
# Terminate script if any command fails
set -o errexit
虽然语法错误显然不同于失败的命令,但在我看来,前者代表了一种更严重的错误情况。
我知道您可以使用-n参数来检查Bash脚本的语法,而无
我正在尝试将一些Windows bat文件移植到Mac shell脚本
执行包含以下case语句的文件时出现语法错误:
case ${1} in
( C | c ) echo "hoera";;
其中,参数${1}被指定为'C‘
传达的信息是:
-bash: even: line 6: syntax error near unexpected token `newline'
'bash: even: line 6: ` ( C | c ) echo "hoera";;
根据文档,我认为语法是正确
在我的终端中,它说我的.bashrc文件有语法错误。我可以从我的.bashrc中识别出一些不正确但无法修复的行。
这是我的.bashrc中似乎包含了问题的部分:
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-comp