shell执行一个程序时,会要求UNIX内核启动一个新的进程,以便在该进程里执行所指定的程序。
1.位于第一行的#!–内核会扫描该行其余部分,看是否存在可用来执行程序的解释权的完整路径
shell脚本通常一开始都是#! /bin/sh
2.变量:变量名=新值(可以为空值) 注:若所赋值内含有空格,加上引号 eg.fullname=”I am learning python”
需要使用变量时变量名称前面加上$字符,也可作为第二个变量的新值 eg.oldname=$fullname
连接不同的变量也需要引号 eg. fullname=”$first $middle $last”
3.echo
原始echo命令将参数打印到标准输出,参数之间以空格隔开,以换行符结尾。它会解释每个字符串里的转义序列。转义序列可用来表示特殊字符,以及控制其行为模式。转移序列如下:
\a–警示字符,用来引起用户注意
\b–退格
\c–输出中忽略最后的换行字符。这个参数之后的任何字符都会被忽略掉(不打印)
\f–清楚屏幕
\n–换行
\r–回车
\t–水平制表符
\v–垂直制表符
\\–反斜杠字符
\0ddd–将字符表示成1到3位的八进制数值
4.复杂的输出–printf
printf format-string [arguments…]
format-string:字符串,用来描述输出的排列方式,最好为此字符串加上引号。
此字符串包含了三部分:characters to be printed literally+format specifications+placeholders。
argument:与格式声明(%指示符)对应的参数列表。
eg. >printf “The first program always prints ‘%s, %s!’ \n” Hello world
>The first program always prints ‘Hello, world!’
5.I/O重定向
- 以<改变标准输入 tr -d ‘\r’ < dos-file.txt
- 以>改变标准输出 tr -d ‘\r’ < dos-file.txt > UNIX-file.txt 注:目的文件不存在时新建,若已存在,则覆盖,原本的数据丢失
- 以 >>附加到文件
- 以|建立管道 tr -d ‘\r’ < dos-file.txt |sort > UNIX-file.txt 第一个程序的标准输出可以变成第二个程序的标准输入,相比于<>好处是使得执行速度比使用临时文件的程序快上十倍
6.访问shell脚本的参数
echo first arg is $1
echo first arg is ${10}–注:超过9,需要大括号