boucle에서 다음 이중 작업을 수행하려고합니다.
#!/bin/bash
#Router cisco
ls equipos/ |grep cisco |tr ' ' '\n' >> $$.cisco.tmp
config="/Users/joseluis/Desktop/prueba/config"
echo "XXXXXXXXXX ficheros"
echo $$.cisco.tmp
echo $config
echo "XXXXXXXXXX contenido tmp"
cat $$.cisco.tmp
echo "XXXXXXXXXX contenido config"
cat $config
echo "XXXXXXXXXX"
while IFS= read -r router
do
echo "LOOP"
echo $router
echo "equipos/$router"
while IFS= read -r config
do
grep "$config" "equipos/$router" &> /dev/null
if [ $? == "1" ]; then
echo "$router -> $config"
fi
echo "---"
echo "$config"
echo "---"
done <"$config"
done <"$$.cisco.tmp"
rm $$.cisco.tmp
$ ./script.sh
XXXXXXXXXX ficheros
7405.cisco.tmp
/Users/joseluis/Desktop/prueba/config
XXXXXXXXXX contenido tmp
cisco.1
cisco.2
XXXXXXXXXX contenido config
a
1
XXXXXXXXXX
LOOP
cisco.1
equipos/cisco.1
---
a
---
cisco.1 -> 1
---
1
---
LOOP
cisco.2
equipos/cisco.2
./script.sh: line 41: : No such file or directory
그러나 두 번째 조건을 평가하려고 하면 "해당 파일 또는 디렉터리가 없습니다." 오류가 발생하지만 이는 사실이 아니며 파일이 존재합니다. 이 오류가 발생하는 이유는 무엇입니까? 누구든지 나를 도와줄 수 있나요?
감사해요.
B.R.
답변1
발생한 오류는 config
두 개의 서로 다른 변수에 동일한 이름( )을 사용했기 때문에 발생합니다.
- 내부 루프에서 파일 이름이 있는 변수를 읽습니다.
- 파일의 각 줄을 받는 변수입니다.
따라서 첫 번째 내부 루프가 끝난 후 이전 변수에는 config
이제 해당 경로 대신 구성 파일의 마지막 줄이 있습니다.