シェルスクリプトを実行しようとするとエラーが発生する(Linux)


0

次のスクリプトを実行しようとしています。以前に問題なく実行しましたが、今ではエラーが発生します。

#!/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)-release
新規インストール、ミント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と入力してEnterキーを押します)、それが戻ります

: 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

返信いただきありがとうございます。シェル自体に何か問題がありますか?


私はあなたのコードを試しました、私のために働いています。実行しているbashのバージョンは何ですか?echo $BASH_VERSION。3行目の「()」を削除できます。functionキーワードと開き角括弧で関数を宣言しています。
リッチホモルカ14年

こんにちは、バージョン出力は「4.2.45(1)-release」です。
ヘロス14年

私は()を削除すると、次のエラーが今返されている:「悪い変数名/ shell.sh:4:読み:」と「構文エラー:予期しない語」
herros

3行目を削除して書き換えるとどうなりますか?別のエディター(メモ帳、ブルーフィッシュなど)で編集を開始したときに、同様の問題が発生しました。通常の実行を妨げる隠し文字がスクリプトに含まれている可能性があります。
ジャッケ14年

私は機能を完全に削除することになりました
ヘロス14年

回答:


0

以前のバージョンのスクリプトの1つを取り戻します。関数を消去する必要はありません。

でスクリプトを実行すると、\bin\bash MyScript.sh正しく機能するようです。
代わりにそれを実行すると\bin\sh MyScript.shエラーが発生します。

どうして?
多くのディストリビューションで\bin\shシンボリックリンクdashあり、他のものbashでは、他のものはオリジナルである可能性があるsh

chown u+x MyScript.shスクリプトの許可で変更し、./MyScript.shシステムでスクリプトを実行した後、最初の行を使用して、実行するスクリプトを理解しshellます。シバンについての詳細は、例えばこちらをご覧ください

でスクリプトを実行する代わりにした場合sh MyScript.sh、あなたが強制的にスクリプトを(この場合は別のシェルで実行されます/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


-1

()関数の定義から2つの括弧を削除すると、次のようになります。

function pause {
    
}

そして、このエラー:

不正な変数名/hey.sh:4:読み取り:構文エラー:予期しない単語

これが原因です:

&&read input

次のようになります。

&& read input

fedora linux 20 64ビット上のbash 4.2.47-2でこれを試しました。


私は上手く理解できていない気がします。それは私のためにエラーになり、私は完全にスクリプトから「一時停止」機能を削除した場合でも、それは「悪い変数名/ hey.sh:4:読み:」と言う
herros

いいえ、後(または前)に空白を挿入する必要はありません&&
スコット14年

今、それは「:not foundhey.sh:」ではないことを私に伝えることから始まりますが、スクリプトを続けます。ホスト名を入力してEnterキーを押すと、同じエラーが発生します。一時停止の機能を完全に削除し、「&& read」の間隔を空けましたが、それでもこれらのエラーが発生します。この非常にスクリプトはlinux mint 14で問題なく動作しましたが、それが役立ったら今朝16をインストールしました。
ヘロス14年

シェルのバージョンを更新しようとしましたか?
arielnmz 14年

更新マネージャーを使用してすべてを更新しましたが、特にシェルは更新しませんでした。
ヘロス14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.