나는 사용자가 결국 변수로 변환될 디렉토리 목록에서 파생된 번호가 매겨진 목록에서 두 개의 파일을 선택하도록 하려고 합니다. 저는 스위치의 일부 출력 표시 명령을 자동으로 결합하려는 네트워크 엔지니어일 뿐입니다.
이것이 작동하지 않는 것입니다.
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
echo
PS3 수정 설명에서 제공하는 프롬프트를 설정하여 현명하게 이러한 설명을 피할 수도 있습니다 .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
}