您的位置:首页 > 运维架构 > Shell

从零开始学shell(4)--命令行及处理

2016-06-01 15:39 246 查看

命令行详解

以一条命令为例:

ls apple




当前文件夹中没有该文件,报错信息如上。

在这里,
ls
是一个真实的命令,shell执行该命令, 命令后的都被称为参数。

tail +10 myfile


命令是
tail
+10
myfile
都是参数

在shell脚本程序里,我们经常需要处理参数,有一些内建的方式可以帮助我们访问这些信息:



我们用
$+数字
指代命令行中的第几个元素

在上图中,myshell为
$0
,foo为
$1
,bar为
$2
.

最多可以用
$1
$9
来表示参数

另外用
$#
表示参数个数

测试以下一个小程序:

#!/bin/sh
#
# Script that demos, command line args
#
echo "Total number of command line argument are $#"
echo "$0 is script name"
echo "$1 is first argument"
echo "$2 is second argument"
echo "All of them are :- $* or $@"


添加执行权限后
chmod 777 demo




有一点需要注意的是:不能给参数赋值

例如
$1=33
这是无效的

IO重定向

很多情况下,我们需要把命令执行的结果输出到文件中保存,有的命令的输入也可以从文件中获得。

有三种主要的重定向符号
>
,
>>
,
<


Linux-command > filename

将命令执行结果输出到filename命名的文件里,如果文件已经存在并且已经有内容了,则抹掉原来的内容,重写该文件。

Linux-command >> filename

>
作用基本相同,唯一不同的是如果filename存在,则在文件末端写入输出结果,不覆盖原有内容。

Linux-command < filename

从filename文件中读取内容,替代键盘输入。

下面举两个例子说明IO重定向的用法:

cat>sname
vivek
ashish
zebra
babu


Ctrl + D
保存

则上面内容被保存到sname文件中

执行下面语句

sort<sname>sorted_sname
cat sorted_sname
ashish
babu
vivek
zebra


在上面的语句中,sort命令从sname中读取内容,将之排序后又输出到sorted_sname中。

第二个例子

tr "[a-z]" "[A-Z]" <sname >cap_names
cat cap_names
VIVEK
ASHISH
ZEBRA
BABU


tr
命令用来将小写字母转换成大写字母 ,从sname中读出内容,将之全部转换成大写字符后输出到cap_names中。

Pipes

中文里又称为管道,在Linux系统编程中也是一种重要的IPC方式。

shell中pipe是一个连接一个程序的输出,作为另一个程序的输入,并且不需要任何中间文件。

通常用法:

command1 | command2


例子:

使用管道的命令解释
ls | morels命令执行的结果成为more的输入,即将ls执行的结果以more打开
who | sort将who执行的结果作为sort的输入,所以会输出排序后的用户信息
who | sort>user_list作用与上句相同,只不过把排序后的结果输出到user_list
who | wc -lwho执行后把结果作为wc的输入,统计当前用户数
ls -l | wc-L统计当前目录的文件数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell