【问题标题】:Shell : What does this script do?壳牌:这个脚本是做什么的?
【发布时间】:2016-01-24 23:34:01
【问题描述】:
#!/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的以下代码。

谢谢

【问题讨论】:

  • 我可能是错的,但我认为如果你继续这样问问题,你可能处于滥用 SO 系统的边缘。
  • 对不起,如果我不正确,但我对这个脚本的真正作用感到困惑。在我看来,他没有回答所提出的问题......
  • @Alba, ...但是 StackOverflow 的重点是建立一个问答知识库。这不是一个一般性的讨论论坛;提问的方式应该对其他人和提问者都有帮助,不仅是在提问时,而且在将来也是如此。这些问题并没有为此目的有效地制定。

标签: bash shell cp


【解决方案1】:

如果不逐行处理代码并对其进行解释,我会向您指出http://explainshell.com,它采用几行shell代码并将手册中的注释放在每个参数上。

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

它应该可以帮助您逐行浏览并弄清楚发生了什么。

【讨论】:

  • 最后我认为我的问题是她:eval "echo $line | cut -d' ' -f5" |一边读 ln
  • 我不确定,但我认为这个脚本没有回答所提出的问题
【解决方案2】:

在文字中:它从目录$1 中选择大小大于$2 的行。

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

$ ./script.sh /home/user 130000

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

不知道为什么 eval 在:

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

该行将与以下内容相同:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多