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
ただし、2番目の条件を評価しようとすると、「ファイルまたはディレクトリはありません。」エラーが発生しますが、これは本当ではなく、ファイルが存在します。このエラーが発生するのはなぜですか?誰でも私を助けることができますか?
ありがとうございます。
BR
ベストアンサー1
発生したエラーは、config
2つの異なる変数に同じ名前()を使用したために発生します。
- 内部ループからファイル名を持つ変数を読み込みます。
- ファイルの各行を受け取る変数です。
したがって、最初の内部ループが終了した後、前の変数にはそのパスの代わりconfig
に設定ファイルの最後の行があります。