使用read命令解析linux shell脚本中的du -s输出

Jar*_*red 3 bash shell

我正在尝试编写一个shell脚本来执行操作,如果用户主目录超过一定大小.不幸的是,当我尝试使用read命令分割du -s输出时,我得到'命令未找到',因为它试图将数字传递给shell,而不是像我想要的那样传递给变量.这是我到目前为止脚本的内容.

#!/bin/bash
cd /home
for i in `ls`
do
    j=`du -s $i`
    #this line gives me the error
    k=`$j |read first;`
done
Run Code Online (Sandbox Code Playgroud)

我得到如下输出:

./takehome.sh: line 6: 3284972: command not found
Run Code Online (Sandbox Code Playgroud)

其中3284972是目录的大小.

And*_*ndy 7

我想你会想要一些东西

#!/bin/bash
for i in *
do
    j=`du -s "$i" | cut -f 1`
    echo $i size is $j
done
Run Code Online (Sandbox Code Playgroud)

读入另一个变量,读取和播放它似乎是多余的.

我相信更优雅的解决方案是Jonathan Leffler的第二种方法(复制粘贴在这里)

#!/bin/bash
cd /home
du -s * |
while read size name
do
    ...
done
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 7

至少有两种方法可以做到这一点:

方法1:

#!/bin/bash
cd /home
for i in `ls`
do
    set -- `du -s $i`
    size=$1
    name=$2
    ...
done
Run Code Online (Sandbox Code Playgroud)

方法2:

#!/bin/bash
cd /home
du -s * |
while read size name
do
    ...
done
Run Code Online (Sandbox Code Playgroud)