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

命令行详解

以一条命令为例:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值