2017-03-20 6 views
0

bashコマンドでネストされたif/elseステートメントに問題があります。コードの最初のセットは完全に機能しましたが、前にread -pセクションに追加すると、何かがスローされました。シェルスクリプトネストされた場合/ Elseステートメント

動作するコード:

#!/bin/bash 

(
echo p 
echo q 
) | sudo fdisk $1 

if [ ! -d "$2" ]; then 
    if [ -f "$2" ]; then 
    echo "$2 exists and is not a directory" 
    exit 1 
    else 
    mkdir "$2" 
    fi 
fi 

function mountDisk() 
{ 
    sudo mount -o loop,offset=$((2048*512)) $1 $2 
} 

mountDisk $1 $2 

をだから、これがうまく働いたが、fdiskの情報を表示し、フォルダを作成し、ドライブをマウントするために実施しました。

情報を与えられた後にマウントを続行するオプションを追加すると、問題が発生しました。 (それが不要とみなされたように-fを取り出した)

コードの変更された部分である:私は最初に、いくつかの異なるバージョンを試みた

read -p "Mount $1 ?" $3 
if [ "$3" = "Yes" ]; then 
    if [ ! -d "$2" ]; then 
     echo "$2 exists and is not a directory" 
     exit 1 
    else 
     mkdir "$2" 
    fi 
else 
    exit 1 
fi 

回線IF([$ 3 ==「はい"]が最初のものです)。しかし、多くの場合、主に単項演算子が期待されるエラーが発生しました。

問題は、現在はエラーが発生していないことです。フォルダを作成したりドライブをマウントしたりすることなく、プログラムを終了してプログラムを終了するように見えます。

私はこれをオンラインで調査するのに多くの時間を費やしており、問題を修正することができませんでしたので、アドバイスをいただければ幸いです。

+1

は、 '$ 3'以外のいくつかの名前を使用する必要があります。 –

答えて

0

readの値をスキャンする構文が正しくないため、別の変数名を使用することをお勧めします。これにより、スクリプトの引数とは何かを区別することができます。

試してください:あなたはこのような位置パラメータに値を割り当てることはできません

read -p "Mount $1 ? " userprompt 
if [ "$userprompt" = "Yes" ]; then 
    if [ ! -d "$2" ]; then 
     echo "$2 exists and is not a directory" 
     exit 1 
    else 
     mkdir "$2" 
    fi 
else 
    exit 1 
fi 
+0

優れています。どうもありがとうございました!治療をしなさい! – Romark14

+0

素晴らしい!それがあなたのために働いた場合は([回答を受け入れる])(http://stackoverflow.com/help/someone-answers)を覚えておいてください – arco444

関連する問題