QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1012|回复: 12

这句shell命令该怎么解释?

[复制链接]
发表于 2005-1-17 22:21:01 | 显示全部楼层 |阅读模式
$echo 2 * 3 > 5 is a number.
这句shell命令得出的结果应该是什么? 当前目录下一个名字为5的新文件,它包含字符串2,当前目录下所有文件的名称,接下来是什么呢,想了一天,脑子还是没有转过来,哪位兄弟来帮帮忙
发表于 2005-1-18 08:59:54 | 显示全部楼层
我的理解是:
首先,“*”的意思是匹配当前目录下所有的文件名(包括目录名)。
其次,把echo的输出重定向到名为“5”的文件。
最后,echo的输出是 -- 2 当前目录的文件名列表 3 is a number。
回复

使用道具 举报

发表于 2005-1-18 10:58:41 | 显示全部楼层
最好加引号~
回复

使用道具 举报

 楼主| 发表于 2005-1-18 11:59:47 | 显示全部楼层
3 is a number。

你的意思所有的输出都是进入5这个文件的是吧, 我也知道这个结果,但是我对最后的 "3 is a number"有点疑问, 它怎么也会出现在这个文件中的?
回复

使用道具 举报

发表于 2005-1-18 17:58:48 | 显示全部楼层
我想这跟没有加引号有关吧。
回复

使用道具 举报

发表于 2005-1-18 20:21:53 | 显示全部楼层

Re: 这句shell命令该怎么解释?

[quote:1de49070be="linky_fan"]$echo 2 * 3 > 5 is a number.
这句shell命令得出的结果应该是什么? 当前目录下一个名字为5的新文件,它包含字符串2,当前目录下所有文件的名称,接下来是什么呢,想了一天,脑子还是没有转过来,哪位兄弟来帮帮忙 [/quote]

等价于:

echo 2 * 3 is a number. > 5

简单地说,因为重定向管道“>”只认识一个参数,所以除了“> 5” 被单独处理外,其他所有一切都是 echo 的参数。
回复

使用道具 举报

发表于 2005-1-19 00:05:54 | 显示全部楼层
简单地说,因为重定向管道“>”只认识一个参数,所以除了“> 5” 被单独处理外,其他所有一切都是 echo 的参数。

回复

使用道具 举报

发表于 2005-1-19 01:05:50 | 显示全部楼层
都是高手啊
回复

使用道具 举报

发表于 2005-1-19 08:47:06 | 显示全部楼层
请帮忙看一下下面的SHELL 脚本(mytar.sh)有什么问题:
#!/bin/bash
if ["$1##*."="tar"]
   then
    echo "this is a tarball".
else
   echo  "this is not a tarball"。
fi
在命令行输入/root/mytar.sh  file.tar时总是提示
line2:[tar=tar] command not found
l第三行的`THEN`是多余的.
以上是在RH9上做的.
回复

使用道具 举报

 楼主| 发表于 2005-1-19 21:00:22 | 显示全部楼层
linky_fan 写到:
$echo 2 * 3 > 5 is a number.
这句shell命令得出的结果应该是什么? 当前目录下一个名字为5的新文件,它包含字符串2,当前目录下所有文件的名称,接下来是什么呢,想了一天,脑子还是没有转过来,哪位兄弟来帮帮忙 Crying or Very sad


等价于:

echo 2 * 3 is a number. > 5

简单地说,因为重定向管道“>”只认识一个参数,所以除了“> 5” 被单独处理外,其他所有一切都是 echo 的参数。
_________________

最近在看orelly的bash书, 这是上面的一个例子, 后来又看了一遍, 注意到了其中的一句解释, ">"这类的重定向苻放在shell命令的任何位置都是可以的, 效果一样....", 呵呵,  恍然大悟.

#!/bin/bash
if ["$1##*."="tar"]
then
echo "this is a tarball".
else
echo "this is not a tarball"。
fi

看个后缀名就可以了吧 :neutral:
回复

使用道具 举报

发表于 2005-1-24 13:50:53 | 显示全部楼层
echo `expr 2 \* 3 \> 5`
回复

使用道具 举报

发表于 2005-1-24 14:24:42 | 显示全部楼层
引用:

#!/bin/bash
if ["$1##*."="tar"]
then
echo "this is a tarball".
else
echo "this is not a tarball"。
fi

看个后缀名就可以了吧 Neutral



下面不是更好?
[code:1]
#!/bin/bash

if [ ! -z "`file $1 | grep bzip2`" ]; then
        echo "bunzip2"
elif [ ! -z "`file $1 | grep gzip`" ]; then
        echo "gunzip"
elif [ ! -z "`file $1 | grep Zip`" ]; then
        echo "unzip"
#
#add other file type
#
else
        echo "other"
fi
[/code:1]
回复

使用道具 举报

发表于 2005-1-26 01:26:15 | 显示全部楼层
[quote:0563f7c382="steaven"]请帮忙看一下下面的SHELL 脚本(mytar.sh)有什么问题:
#!/bin/bash
if ["$1##*."="tar"]
   then
    echo "this is a tarball".
else
   echo  "this is not a tarball"。
fi
在命令行输入/root/mytar.sh  file.tar时总是提示
line2:[tar=tar] command not found
l第三行的`THEN`是多余的.
以上是在RH9上做的.[/quote]
[]内各项要有至少一个空格,即
[code:1]
[ "$1##*." = "tar" ]
[/code:1]
正确的判断应该用file,[code:1]
file $1|grep -q "tar archive"&&echo $1 "is a tarball file"||echo $1 "is not a tarball file"[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-10-6 15:30 , Processed in 0.050550 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表