出力に文字が含まれている場合はbashコマンドを実行し、出力が空の場合は他のコマンドを実行する必要があります

mYzk

マウントスクリプトがあり、Pythonコマンド出力に文字が含まれているときにコマンドを実行する必要があります。出力が空の場合は、別のコマンドを実行します。

例:

## define a function that launched the zenity username dialog
get_username(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Username:"
}
# define a function that launched the zenity password dialog
get_password(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Password:" --hide-text
}

# attempt to get the username and exit if cancel was pressed.
wUsername=$(get_username) || exit

# if the username is empty or matches only whitespace.
while [ "$(expr match "$wUsername" '.')" -lt "1" ]; do
    zenity --error --title="Error in username!" --text="Please check your username! Username field can not be empty!"  || exit
    wUsername=$(get_username) || exit
done

wPassword=$(get_password) || exit

while [ "$(expr match "$wPassword" '.')" -lt "1" ]; do
    zenity --error --title="Error in password!" --text="Please check your password! Password field can not be empty!" || exit
    wPassword=$(get_password) || exit
done

Save_pwd=$(python -c "import keyring; keyring.set_password('My namespace', 'wUsername', '$wPassword')")

Get_wPassword=$(python -c "import keyring; keyring.get_password('My namespace', '$wUsername')")

echo $Get_wPassword
# mount windows share to mountpoint
#sudo mount -t cifs //$SERVER/$SHARE ${HOME}/${DIRNAME} -o username=${wUsername},password=${Get_wPassword},domain=${DOMAIN}

# show if mounting was OK or failed
#if [ $? -eq 0 ]; then
#       zenity --info --title="Mounting public share succeeded!" --text="Location Documents/Shares/public!"
#else
#       zenity --error --title="Mounting public did not succed!" --text="Please contact system administrator!"
#fi

このスクリプトでは、最初にzenityユーザー名入力を実行する必要があります。実行されると、Python $ Get_wPasswordが実行され、空でない出力がmount得られると、$ Get_wPasswordから取得したユーザー名とパスワードを使用してコマンドが実行されます$ Get_wPasswordが空の場合は、$ Save_pwdコマンドを使用してパスワード入力も実行する必要があります。これにより、パスワードがキーリングに保存され、次にスクリプトを実行するときに、そこからパスワードが取得mountされます。

どうすればこれを達成できますか?間のループ?はいの場合、いくつか例を挙げていただけますか?私はスクリプトを初めて使用します。

John1024

私が理解しているように、呼び出されたシェル変数Get_wPasswordが空でない場合はコマンドを実行し、空の場合は別のコマンドを実行する必要があります。幸い、空の文字列に対する簡単なシェルテストがあります。

if [ -n "$Get_wPassword" ]
then
    CommandIfNotEmpty
else
    CommandIfEmpty
fi

構文の長さがゼロ以外の[ -n somestring ]場合はtruesomestringを返し、文字列が空の場合はfalseを返します。詳細についてはman bash、を参照してください。

実際に何をしたいのかを推測して、次のことを検討してください。

if [ -n "$Get_wPassword" ]
then
    if sudo mount -t cifs //$SERVER/$SHARE ${HOME}/${DIRNAME} -o username=${wUsername},password=${Get_wPassword},domain=${DOMAIN}
    then
        zenity --info --title="Mounting public share succeeded!" --text="Location Documents/Shares/public!"
    else
        zenity --error --title="Mounting public did not succed!" --text="Please contact system administrator!"
    fi
else
    echo "Password was empty..."
fi

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ