第二十课 shell命令
命令行 用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如: $ date 二 11 23 01:34:58 CST 1999 $ 用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如下: $ Command Option Arguments
命令行实际上是可以编辑的一个文本缓冲区,在按回车之前,可以对输入的文本进行编辑。比如利用BACKSPACE键可以删除刚键入的字符,可以进行整行删除,还可以插入字符,使得用户在输入命令,尤其是复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。 利用上箭头可以重新显示刚执行的命令,利用这一功能可以重复执行以前执行过的命令,而无须重新键入该命令。 bash保存着以前键入过的命令的列表,这一列表被称为命令历史表。按动上箭头,便可以在命令行上逐次显示各条命令。同样,按动下箭头可以在命令列表中向下移动,这样可以将以前的各条命令显示在命令行上,用户可以修改并执行这些命令。这一特征将在10.4节中进行详细的论述。 在一个命令行中还可以置入多个命令,用分号将各个命令隔开。例如: $ ls -F;cp -i mydata newdata 也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。 $ cp i / mydata / newdata 上面的cp命令是在三行中输入的,开始的两行以反斜杠结束,把三行作为一个命令行。 shell中的特殊字符 shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含义和作用范围。下面分别对这些特殊字符加以介绍。
在shell中引号分为三种:单引号,双引号和反引号。
由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如: $ string=’$PATH’ $ echo $string $PATH $ 可见$保持了其本身的含义,作为普通字符出现。
由双引号括起来的字符,除$、/、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量的值来代替这个变量和$;对于/而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上/的只有四个字符$,/,’和”本身。而对”号,若其前面没有加/,则Shell会将它同前一个”号匹配。 例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令: $ TestString=”$PATH///”/$PATH” $ echo $TestString .:/usr/bin:/ bin/”$PATH $ 读者可以自己试一下在第二个双引号之前不加/会产生什么结果。
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如: $ pwd /home/xyz $ string=”current directory is `pwd`” $ echo $string current directour is /home/xyz $ shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果。 利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如: $ today=`date` $ echo Today is $today Today is Mon Apr 15 16:20:13 CST 1999 $ 反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线(/)将其转义。例如: $ abc=`echo The number of users is /`who| wc-l/`` $ echo $abc The number of users is 5 $ 在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执行``中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如: $ ls note readme.txt Notice Unix.dir $ TestString=”`echo $HOME ` ` ls [nN]*`” $ echo $TestString /home/yxz note Notice $ 其他情况,读者可自行试之。
在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。 此外还有一些特殊字符如:用于输入/输出重定向与管道的<、>、<<、>>和|;执行后台命令的&;命令执行操作符&&和||及表示命令组的{}将在下面各小节中加以介绍。 |