Linux系统中bash shell编程的10个基础问题讲解

2019-09-23 09:20:30王振洲

$:给一般使用者帐号使用 #:给root(管理员)帐号使用

事实上,shell prompt的意思很简单:是shell告诉使用者:您现在可以输入命令行了。我们可以说,使用者只有在得到shell prompt才能打命令行,而cursor是指示键盘在命令行所输入的位置,使用者每输入一个键,cursor就往后移动一格,直到碰到命令行读进CR(Carriage Return,由Enter键产生)字符为止。CR的意思也很简单:是使用者告诉shell:老兄你可以执行我的命令了。

严格来说:所谓的命令行,就是在shell prompt与CR字符之间所输入的文字。(思考:为何我们这里坚持使用CR字符而不说Enter键呢?答案在后面的学习中揭晓。)不同的命令可接受的命令行格式或有不同,一般情况下,一个标准的命令行格式为如下所列:

command-name options argument
若从技术细节来看,shell会依据IFS(Internal Field Seperator)将command line所输入的文字给拆解为“字段”(word)。然后再针对特殊字符(meta)先作处理,最后再重组整行command line。(注意:请务必理解上两句话的意思,我们日后的学习中会常回到这里思考。)

其中的IFS是shell预设使用的字段分隔符号,可以由一个及多个如下按键组成:

空白键(White Space) 表格键(Tab) 回车键(Enter)

系统可接受的命令名称(command-name)可以从如下途径获得:

明确路径所指定的外部命令

命令别名(alias) 自定功能(function) shell内置命令(built-in) $PATH之下的外部命令

每一个命令行均必需含用命令名称,这是不能缺少的。

第3问:别人echo、你也echo,是问echo知多少?
承接上一章所介绍的command line,这里我们用echo这个命令加以进一步说明。温习---标准的command line包含三个部件:

command_name option argument
echo是一个非常简单、直接的Linux命令:将argument送出至标准输出(STDOUT),通常就是在显示器(monitor)上输出。(注:stdout我们日后有机会再解说)。为了更好理解,不如先让我们先跑一下echo命令好了:

$ echo
你会发现只有一个空白行,然后又回到shell prompt上了。这是因为echo在预设上,在显示完argument之后,还会送出一个换行符号(new-line charactor)。但是上面的command并没任何的argument,那结果就只剩一个换行符号了…

若你要取消这个换行符号,可利用echo的-n option:

$ echo -n
不妨让我们回到command line的概念上来讨论上例的echo命令好了:command line只有command_name(echo)及option(-n),并没有任何argument。

要想看看echo的argument,那还不简单﹗接下来,你可试试如下的输入:

$ echo first line
first line
$ echo -n first line
first line $