cifs共有をマウントするときに正しいパスワードが入力されていることを確認し、それをユーザーに報告するためのbashスクリプトを作成しました。
まったく動作しません。私の言葉は、そのすべてがgrep
今私にとっては理解できないということです。パスワードを入力した後の出力ではなく、元のコマンドをgrepします。
#!/bin/bash
share=sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me
$share
if [[ ($share | $(grep) "mount error (13): Permission denied") ]]; then
echo "Wrong password"
else
echo "Successful mount"
fi
パスワードが間違っているときに出力される様子は次のとおりです。
Password for [email protected]/windows-share:
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
条件文で2行目をgrepしようとしています。これが可能であれば...
答え1
スクリプトにはいくつかの問題があります。
;
変数にスペース(またはなどのシェルに特別な意味を持つ他の文字)を含めるには、文字列全体を引用符で囲む&
必要があります。例えばshare='sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me'
引用符なしで書く方法は、を設定して
share=sudo
実行することですがmount.cifs ...
、これはまったく望むものではありません。さらに重要なのは、スクリプトのデザイン全体が間違っていることです。 $share変数を定義して実行する必要はなく、それを行ってもその変数を検索してマウント結果を取得できません(そして行が
($share | $(grep) ...)
有効なシェル構文ではないという事実も無視されます)。
sudo mount
スクリプトは、コマンドの終了コードを直接テストする次のようなものでなければなりません。
if sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me ; then
echo Successful mount
else
echo Mount failed
fi
ただし、返される可能性がある終了ステータスコードの完全なリストについては、を参照してman mount
検索してください。ただし、ほとんどの場合、成功(0)または失敗(他のすべて)にのみ注意が必要です。EXIT STATUS
mount
ゼロ以外の終了コードの一部または全部を実際に処理する必要がある場合は、次のことを行う必要があります。
sudo mount.cifs //192.168.0.10/windows-share Shared/ -o user=me
result=$?
case "$result" in
0) echo Successful mount ;;
1) echo incorrect invocation or permissions ;;
2) echo 'system error (out of memory, cannot fork, no more loop devices)' ;;
4) echo internal mount bug ;;
8) echo user interrupt ;;
16) echo problems writing or locking /etc/mtab ;;
32) echo mount failure ;;
64) echo some mount succeeded ;;
esac