shell 脚本第一行要指明要使用的 shell,其格式是:
1
2
3
4
5
6
7
8#!/bin/bash
```
在通常的 shell 脚本的行里,井号(#) 用作注释行.然而 shell 脚本文件的第一行是个特例,井号后接感叹号指明用哪个 shell 来运行脚本.
- 在环境变量前加 $ 符号可以输出环境变量的值.
```
echo $USER在脚本中看到美元符号,shell 脚本会以为在引用一个变量,可以通过在变量两侧添加花括号来识别美元符号后的变量名:
1
2
3
4
5
6
7
8
9${variable}
```
- 通过等号给用户变量赋值时,在变量/等号和值之间不能出现空格.
- 类似于系统变量,也可通过美元符号获得用户变量的值.
```
name="chao"
echo $name将一个变量的值赋值给另一个变量时,必须使用美元符号,否则 shell 会将变量名解释成普通的文本字符串.
反引号(`)允许你将 shell 命令的输出赋值给变量(必须用反引号把整个命令行圈起来).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30d=`date`;echo $d
```
- 输出重定向: 将命令的输出发送到一个文件中.
```
date > date.txt
```
`>` 符号是覆盖文件中的文本(如果文本中已有数据),要想在文本数据中追加内容可以使用 `>>` 符号.
- 输入重定向: 将文件的内容重定向到命令.
```
wc < date.txt
```
结果: 1 6 43
wc 命令提供了对数据中文本的计数.默认情况下,它会输出3个值:
- 文本的行数;
- 文本的词数;
- 文本的字节数.
- 管道: 将一个命令的输出重定向到另一个命令,类似于反引号(`). 格式:
```
command1 | command2
```
管道两边的命令会同时运行,在系统内部将它们连接起来.在第一个命令产生输出的同时,输出会被立即送给第二个命令.传输数据不会用到任何中间文件或缓冲区域.
- expr 命令: Bourne shell 提供的用来处理数据表达式的命令.
- bash shell 兼容了 expr 表达式,但同时也提供了一个更简单的方法.在 bash 中,在将一个数学运算结果赋给某个变量时,可以用美元符号和方括号($[operation])将数学表达式圈起来.
```
var=$[1 + 5]
命令行参数: 通过命令参数可以想 shell 脚本传递参数.
./addem 10 30
bash shell 会将一些成为位置参数的特殊变量分配给命令行输入的
所有参数.位置参数变量是标准的数字:
$0 是程序名,
$1 是第一个参数,
$2 是第二个参数,
…read 命令: read 命令接受从标准输入(键盘)或另一个文件的描述符的输入,在收到输入后,read 命令会将数据放进一个标准变量.
echo -n "Enter your name: " read name echo "Hello $name, welcome to my program. "
echo 命令的 -n 选项会移掉字符串末尾的换行符,允许脚本用户紧跟其后输入数据,而不是下一行.
read 命令允许制定多个变量.输入的每个数据值都会分配给表中的下一个变量.如果变量表在数据之前用完了,剩下的数据就会都分配给最后一个变量.
read 命令可以设置超时时间(s),当超时后,read 命令会返回一个非零退出状态码.
read -t 5 "Please enter your name: " name
read 命令的 -s 参数可以隐藏数据显示.
read 命令也可以用来读取 Linux 系统上文件里保存的数据.每次调用 read 命令时会从文件中读取一行文本.当文件中再没有内容时,read 命令会退出并返回非零退出状态码.
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理