Shell:这个脚本做什么?

时间:2015-10-25 23:03:30

标签: bash shell cp

#!/bin/bash
if test $# -ne 2
  then
  echo "Error : Invalid number of arguments"
else
  if [ -d $1 ]
    then
    if [[ $2 =~ ^[0-9]+$ ]]
    then
      ls -l $1 | while read line
      do
        eval "echo $line | cut -d' ' -f5" | while read ln
        do
          if [[ $ln -gt $2 ]]
          then
            echo $line
          fi
        done
      done
    else
      echo $2" is not a integer"
    fi
  else
      echo "The repertory "$1" does not exist "
  fi
fi

问题是制作cpp,就像命令cp一样。如果我们不给出2个参数,它应该正确反应的脚本。我不明白这个脚本从第10行开始做什么。

此代码如下Explain me 2 lines of this shell script

由于

2 个答案:

答案 0 :(得分:0)

如果不逐行处理代码并解释它,我会指向http://explainshell.com,它接受​​一系列shell代码并在每个参数的手册中放置评论。

例如,这是上面第12行的一部分:http://explainshell.com/explain?cmd=echo+%24line+%7C+cut+-d%27+%27+-f5

它可以帮助你逐行完成并弄清楚发生了什么。

答案 1 :(得分:0)

单词:它从目录ls -l中选择$1的行,其大小大于$2

如果该代码位于名为script.sh的文件中,则称为:

$ ./script.sh /home/user 130000

它会打印ls -l /home/user所有大小超过130000的行。

我不知道为什么eval在:

eval "echo $line | cut -d' ' -f5" | while read ln

该行的工作方式与:

相同
echo $line | cut -d' ' -f5 | while read ln