尝试运行 shell 脚本时出错(Linux)

尝试运行 shell 脚本时出错(Linux)

我正在尝试运行以下脚本。我之前运行过它,没有问题,但现在我遇到了错误。

#!/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 dashotherbash可以是原文中的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             

注意:我使用
更改了许多内容,因为在这种情况下它更紧凑。使用 时,您必须记住放置以添加换行符、制表符等等... echoprintf
printf\n\t

答案2

()从函数定义中删除两个括号,使其看起来像这样:

function pause {
}

还有这个错误:

错误的变量名/hey.sh: 4: 读取:语法错误:单词意外

是因为这个:

&&read input

应该是这样的:

&& read input

刚刚在 Fedora Linux 20 64 位上使用 bash 4.2.47-2 尝试了此操作。

相关内容