2011-09-20 38 views
3

我应该制作一个脚本,使用“set”命令打印当前目录中的所有大小和文件名,按大小排序。使用“set”命令的简单bash脚本

#!/bin/bash 

touch /tmp/unsorted 

IFS='@' 
export IFS 

ls -l | tr -s " " "@" | sed '1d' > /tmp/tempLS 

while read line 
do 
    ##set probably goes here## 
    echo $5 $9 >> /tmp/unsorted 
done < /tmp/tempLS 

sort -n /tmp/unsorted 
rm -rf /tmp/unsorted 

通过逻辑,这是应该工作的脚本,但它只产生空白行。 经过与同学讨论后,我们认为“set”命令必须先在while循环中执行。问题是我们不能理解“set”命令的作用,以及如何使用它。请帮忙。谢谢。

+0

你对'$ 5'的期望是什么,你想做什么? –

+0

$ 5是大小,$ 9是文件名 – alf

+0

请注意,如果文件名有空格,它不会完全包含在'$ 9' –

回答

6
ls -l | while read line; do 
    set - $line 
    echo $5 $9 
done | sort -n 

或者干脆

ls -l | awk '{print $5, $9}' | sort -n 
+0

谢谢yi_H,但我必须使用“set”命令 – alf

+0

@alf:我知道了。请参阅更新。 –

+0

它的工作原理!都使用'set -'和'set --'。谢谢你的帮助! – alf

2

集操纵shell变量。这使您可以针对特定情况调整当前环境,例如调整当前通配规则。

有时需要在脚本中调整环境,以便稍后在正确设置选项。由于脚本在子shell中运行,因此您调整的选项在脚本之外将不起作用。

This link在各种可用的命令和选项上有大量的信息。

+0

谢谢斯宾塞,当我在谷歌搜索“设置”时,我已阅读此页面。但我想不出任何我可以操纵的变量。 – alf

+0

@alf变量列表位于页面顶部的语法链接下。或者您可以在终端中查看bash手册页以获取更完整的列表。 –