我正在尝试运行以下脚本。我之前运行过它,没有问题,但现在我遇到了错误。
#!/bin/bash
# init
function pause(){
read -p "$*"
}
echo & echo "(Website):" &&read input
output=$(ping -c 1 "$input" 2>/dev/null)
if [ $? -eq 0 ]; then
ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}' 2>/dev/null)
clear
echo
echo "$ip";
echo -n $ip | xclip -selection c
echo
echo
echo IP copied to clipboard.
echo
echo && sleep 2
pause 'Press [Enter] key to exit...'
exit
else
clear
echo
echo "Host not found";
echo && sleep 1
pause 'Press [Enter] key to exit...'
exit
fi
但现在突然出现以下错误:
3: /home/username/Desktop/shell.sh: Syntax error: "(" unexpected
我没有对脚本本身做任何更改,我不明白为什么这个括号现在会导致错误。有人发现这个脚本中我遗漏了什么吗?
Bash 版本:4.2.45(1)-发布
全新安装,mint 16(更新了所有内容)
编辑:我会把这个放在这里,这样我就可以实际展示发生了什么。
我最终完全删除了暂停功能:
#!/bin/bash
# init
echo & echo "(Website):" && read input
output=$(ping -c 1 "$input" 2>/dev/null)
if [ $? -eq 0 ]; then
ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}' 2>/dev/null)
clear
echo
echo "$ip";
echo -n $ip | xclip -selection c
echo
echo
echo IP copied to clipboard.
echo
echo && sleep 2
exit
else
clear
echo
echo "Host not found";
echo && sleep 1
exit
fi
但是当我运行“sh ~/Desktop/shell.sh”时,我得到了这个:
: not found/Desktop/shell.sh: 3: /home/username/Desktop/shell.sh:
(Website):
(我输入 google.com 并按回车键)它返回
: bad variable name/shell.sh: 4: read:
: not found/Desktop/shell.sh: 5: /home/username/Desktop/shell.sh:
/home/username/Desktop/shell.sh: 24: /home/username/Desktop/shell.sh: Syntax error: word unexpected
谢谢大家的回复,是不是shell本身有问题?
答案1
我收回你之前的一个脚本版本,不需要删除这个功能。
当我用 运行脚本时,它\bin\bash MyScript.sh
似乎运行正常。
如果我用 运行它,\bin\sh MyScript.sh
它会出错。
为什么?
在许多发行版\bin\sh
中符号链接to , in dash
otherbash
可以是原文中的sh
。
如果你更改了chown u+x MyScript.sh
脚本的权限,然后你执行它,./MyScript.sh
系统将使用第一行来了解shell
执行它的方式。你可以阅读更多关于舍邦例如这里
sh MyScript.sh
如果你运行脚本力量使用不同的 shell 执行的脚本(在本例中/bin/sh
)。
#!/bin/bash
function pause(){
read -p "$*"
}
printf "\n(Website):" &&read input
output=$(ping -c 1 "$input" 2>/dev/null)
if [ $? -eq 0 ]; then
ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}' 2>/dev/null)
clear
printf "\n${ip}";
echo -n $ip | xclip -selection c
printf "\n\nIP copied to clipboard.\n\n\n"
sleep 2
pause 'Press [Enter] key to exit...'
exit 0
else
clear
printf "\n\n Host not found\n\n"
sleep 1
pause 'Press [Enter] key to exit...'
exit 1
fi
注意:我使用
更改了许多内容,因为在这种情况下它更紧凑。使用 时,您必须记住放置以添加换行符、制表符等等... echo
printf
printf
\n
\t
答案2
()
从函数定义中删除两个括号,使其看起来像这样:
function pause {
…
}
还有这个错误:
错误的变量名/hey.sh: 4: 读取:语法错误:单词意外
是因为这个:
&&read input
应该是这样的:
&& read input
刚刚在 Fedora Linux 20 64 位上使用 bash 4.2.47-2 尝试了此操作。