关闭

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

标签: shell
142人阅读 评论(0) 收藏 举报
分类:

命令行详解

以一条命令为例:

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重定向

很多情况下,我们需要把命令执行的结果输出到文件中保存,有的命令的输入也可以从文件中获得。
有三种主要的重定向符号>, >>, <

  1. Linux-command > filename
    将命令执行结果输出到filename命名的文件里,如果文件已经存在并且已经有内容了,则抹掉原来的内容,重写该文件。
  2. Linux-command >> filename
    > 作用基本相同,唯一不同的是如果filename存在,则在文件末端写入输出结果,不覆盖原有内容。

  3. 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 | more ls命令执行的结果成为more的输入,即将ls执行的结果以more打开
who | sort 将who执行的结果作为sort的输入,所以会输出排序后的用户信息
who | sort>user_list 作用与上句相同,只不过把排序后的结果输出到user_list
who | wc -l who执行后把结果作为wc的输入,统计当前用户数
ls -l | wc-L 统计当前目录的文件数
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4087次
    • 积分:186
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章分类