Shell 程序的第一行
- 第一行: 指定用哪个程序来编译和执行脚本
#!/bin/bash
#!/bin/sh
#!/bin/csh
- 注释行用
#
符号
变量概述
变量命名
- 变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。任何其它字符都标志变量名的结束
- 变量名关于大小写敏感
变量类型:
根据变量的作用域,变量可以分为本地变量和环境变量
本地变量只在创建它们的 shell 程序中可用。而环境变量则在 Shell 中的所有用户进程中可用,通常也称为 全局变量
环境变量称为全局变量,按照惯例需要大写
export LANG
- 注意:可被所有的 Shell 环境下访问;如果父进程 Shell 进程产生了子 Shell 进程,则环境变量可被“继承”并复制
只读变量 是指不能被清除或者重新赋值的变量
#readonly myvar
变量赋值:
variable=value
- 等号两边不能有空格
- 如果要给变量赋空值,可以在等号后面跟一个换行符
变量常见操作
- 显示变量的值
echo $variable
或echo ${variable}
- 清除变量
unset variable
位置参量(命令行参数)
- 位置参量是一组特殊的内置变量,通常被 shell 脚本用来 从命令行接受参数,或被函数用来保存传递给它的参数。
- 执行 shell 脚本时,用户可以通过命令行向脚本传递信息,跟在脚本名后面的用 空格 隔开的每个字符都称为位置参量。
- 在脚本中使用这些参数时,需通过位置参量来引用。例如:**$1** 表示第一个参数,**$2** 表示第二个参数,以此类推。**$9** 以后需要用花括号把数字括起来,如第 10 个位置参量以 ${10} 的方式来访问。
数组
- 数组定义
arr=(math english chinese)
- 数组初始化
- arr=(math english chinese)
- 数组引用
- 引用变量:
${arr[0]}
- 数组个数:
${#arr[*]}
- 所有元素:
${arr[*]}
- 引用变量:
输入输出
输入—— read命令
read var
从标准输入读取一行并赋值给变量 varread
从标准输入读取一行并赋值给内置变量 REPLYread -a arr
读取一组词,依次赋值给数组 arr
输出 —— echo 命令
输出一行文本
echo "Hello World"
输出一个变量值
echo $num
或echo ${num}
单引号、双引号、反引号区别
单引号 忽略所有特殊字符
双引号 忽略大部分特殊字符( $,` 等字符除外 )
反引号 命令替换(将一个命令的标准输出插入到命令的任何位置)
- $() 同上
命令可以替换嵌套
- 如果使用反引号,则内部的反引号必须用反斜杠来转义
1
2echo `basename \`pwd\``
echo $(basename $(pwd))
条件测试
- 条件测试可以根据某个特定条件是否满足,来选择执行相应的任务
- Bash 中允许测试两种类型的条件:
- 命令成功或失败,表达式为真或假
- 任何一种测试中,都要有 退出状态(返回值),退出状态为 0 表示命令 成功 或表达式为 真,非0 则表示命令 失败 或表达式为假
- 状态变量 $? 中保存命令退出状态的值
测试表达式的值
表达式测试包括 字符串测试、整数测试 和 文件测试
内置测试命令 test
- 通常用 test 命令来测试表达式的值
1
2x=5;y=10
test $x -gt $y- **test ** 命令可以用 方括号 来代替
1
[ $y -gt $x ]
流编辑器 sed
- sed 是一个精简的、非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出。
- 逐行读取文件内容存储在临时 缓冲区 中,称为“模式空间”( pattern space ),接着用 sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。源文件内容并没有改变。