Shell Script\、オプション入力用のディレクトリリストを表示/比較する2つのファイルを選択しよう

Shell Script\、オプション入力用のディレクトリリストを表示/比較する2つのファイルを選択しよう

私は、最終的に変数に変換されるディレクトリのリストから派生した番号付きリストから2つのファイルを選択するようにしたいと思います。私はスイッチのいくつかの出力表示コマンドを自動的に組み合わせたいネットワークエンジニアです。

これはうまくいきません。

echo "Please Select the Show interface status file"
select FILE1 in *;
echo "Please Select the Show Vlan file"
select FILE2 in *;

do

ディレクトリからファイルを選択できるようになったら、「cat $FILE1 > file1」と「cat $FILE2 > file2」を選択し、それらを結合する予定です。

答え1

次の文に進む前に、select各文を完了する必要があります。文はselect実際には特別なタイプのループです。

次のスクリプトがある場合は、examplefile01ファイルセットがあるとします。examplefile10

select f in example*; do
  echo "You selected $f"
  break
done

実行すると、次のようになります。

$ ./470595.sh
1) examplefile01    4) examplefile04   7) examplefile07  10) examplefile10
2) examplefile02    5) examplefile05   8) examplefile08
3) examplefile03    6) examplefile06   9) examplefile09
#? 5
You selected examplefile05

このbreakドアは重要です。それ以外の場合は、selectオプションを再レンダリングするためにループバックを実行するためです。

したがって、お客様の場合は、次のものが必要になる場合があります。

echo "Please Select the Show interface status file"
select FILE1 in *; do
    cat "$FILE1" >> outputfile1
    break
done

echo "Please Select the Show Vlan file"
select FILE2 in *; do
    cat "$FILE2" >> outputfile2
    break
done

echoPS3の修正説明で提供されるプロンプトを設定することで、これらの説明を賢明に回避することもできます。select

PS3="Please Select the Show interface status file )"
select FILE1 in *; do
    cat "$FILE1" >> outputfile1
    break
done

PS3="Please Select the Show Vlan file )"
select FILE2 in *; do
    cat "$FILE2" >> outputfile2
    break
done

また、ファイルをマージする予定なので、最終選択と同時に実行する方が簡単な場合があります。

PS3="Please Select the Show interface status file )"
select FILE1 in *; do
    break
done

PS3="Please Select the Show Vlan file )"
select FILE2 in *; do
    cat "$FILE1" "$FILE2" > outputfile
    break
done

答え2

助けてくれたおかげで作業を完了できました。きれいではありませんが、私が望むようになります。

#Combine Show Vlan and Show interface status Function
combinevlanshint()
{
cd $shintstatvlan
clear
#Ask for Hostname 
echo "Names can not contain spaces:"
echo " "
echo "Please enter the Hostname"
read "hostname" 
clear
echo "Please Select the Show interface status file"
select FILE1 in *; do
    cat "$FILE1" > $shintstatvlan/file1
    break
done
echo "Please Select the Show Vlan file"
select FILE2 in *; do
    cat "$FILE2" > $shintstatvlan/file2
    break
    done

echo "You picked $FILE1 and $FILE2 , These files will now be combined. Press any key to continue"
read -n 1



     cat $FILE1 > file1
     cat $FILE2 > file2
sed 's/[[:space:]]*,[[:space:]]*/,/g' file1 > file1.$$ && awk -F, 'FNR==NR{f2[$1]=$2;next} FNR==1{print $0, "VLAN Name";next} {print $0,($5 in f2)?f2[$5]:"NA"}' OFS=, file2 file1.$$ > file3 && rm file1.$$
mv file3 
mv --backup=t $shintstatvlan/file3 $outputdir/$hostname.shintstatwvlans.txt
rm $shintstatvlan/file1 $shintstatvlan/file2
break
clear
mainmenu
}

関連情報