エラーを修正するために私のコードに関する新しい質問を投稿しています。
if [ -f /etc/centos-release ]; then
OS="CentOs"
VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)
VER=${VERFULL:0:1} # return 6 or 7
elif [ -f /etc/lsb-release ]; then
OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')
VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')
elif [ -f /etc/os-release ]; then
OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')
VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')
else
OS=$(uname -s)
VER=$(uname -r)
fi
ここのコードはelif [ -f /etc/lsb-release ]; then
エラーを示しています。
答え1
シェルが公開したスクリプトの5行目でこのエラーを報告した場合、then
最初の行に目に見えないエラーがあるはずです。
レビュースクリプトを使用して、cat -A
行に予期しないALTスペースまたは他の印刷できない文字があるかどうかを確認できます。cat -A
各行の末尾に、改行文字、プレフィックス付きの制御文字、プレフィックスセットのビット8を持つ印刷できない文字が表示されます。たとえば、TAB文字はで表されます。$
^
M-
^I
出力がcat -A
少し歪んで見えるかもしれませんが、印刷できない文字がないことを確認するのに最適な方法です。
答え2
次のコマンドを実行してファイルを変更できます。
sed -i 's/\r$//' filename
答え3
この種の問題が発生しました。私の解決策は、ファイルからdos2unixを実行することでした。それからすべてが大丈夫でした。
答え4
このスクリプトの部分は私にとってうまくいきます。 @telecoMが指摘したように、スクリプトに奇妙な文字がある可能性があります。
$ cat -A x1
#!/bin/bash$
if [ -f /etc/centos-release ]; then$
OS="CentOs"$
VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)$
VER=${VERFULL:0:1} # return 6 or 7$
elif [ -f /etc/lsb-release ]; then$
OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')$
VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')$
elif [ -f /etc/os-release ]; then$
OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')$
VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')$
else$
OS=$(uname -s)$
VER=$(uname -r)$
fi$
$ ./x1
$