关于bash shell脚本的澄清

时间:2013-10-21 14:40:48

标签: bash shell

任何人都可以解释使用read i的部分。 i来自哪里。

scp -i ~/.ssh/id_rsa.sample gaara@stuid.student.com:ready/$2/*.zip ./$2 > slate.out 2>&1

ls -1 $2/* > curr.lst 2>/dev/null

while
read i
do
  if
    test -e ../done/"$i"
  then
      diff "$i" ../done/"$i" >/dev/null 2>&1
    if
      test $? -eq 0
    then
      rm "$i"
    fi
  fi
done < curr.lst

2 个答案:

答案 0 :(得分:4)

read的这种语法通常用于处理文件中的多行。让我们通过省略内循环来简化:

while
read i
do
  # Process i
done < curr.lst

'while x do;完成'语法非常基本且易于理解,但添加I / O重定向可能会令人困惑。在< curr.lst之后添加done时,意味着“将此文件的内容用作stdin作为条件。因此,如果您现在省略循环,则得到:

read i < curr.lst

现在很清楚read正在从curr.lst获取输入并将变量i设置为每行的内容。因此,该代码块基本上意味着“将curr.lst的每一行作为变量i处理,其中包含循环内的代码。

答案 1 :(得分:3)

“read”,根据手册页(shell中的类型man page),从文件描述符中读取。

在你的代码中,为“curr.lst”中的每一行创建循环,这些循环放在变量$i