shell 脚本
1.shell变量
定义变量语法:变量名=值 your_name="mx"
定义变量规则:
- 变量名和等号之间不能有空格
- 变量命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
使用变量:${变量名} :使用一个定义过的变量,只要在变量名前面加美元符号即可。变量名外面的花括号是可选的,加不加都行。推荐给所有变量加上花括号,这是个好的编程习惯。
2.shell 中的 命令分隔符 ;
语法: command1 ; command2 ; command3
shell的一条命令需要独占一个物理行,如果需要将 多条命令放在同一行,命令之间要使用命令分隔符 ; 来分隔。
3.exit n 命令 和 $?:exit 命令 使shell退出,也就是 手动结束脚本运行 参数n表示带返回值n退出,调用环境就可以根据这个返回值判断 这个程序运行是否成功。exit 0: 表示在调用环境 使用 $? 就会返回0。0一般代表正常
参考 Shell $?:获取函数返回值或者上一个命令的退出状态
例如:如果两个脚本,脚本a 和 脚本b 。 在脚本b中调用脚本a,需要在脚本b中判断脚本a的执行结果是否正常返回。
#调用 脚本a
if[$? -eq 0]
then
echo "正常"
fi
4. Shell 特殊符号 管道符号 |
用法: command 1 | command 2 功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2
#执行结果是一样的 都是把zcat文件的第1列和第4列输出到屏幕上
[root@VM_0_8_centos bin]# cat zcat | awk '{print $1 $4}'
[root@VM_0_8_centos bin]# awk '{print $1 $4}' zcat
5. Shell 特殊符号 $$ 当前Shell进程ID Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
[root@VM_0_8_centos lib]# echo "pid is $$"
pid is 28336
6.echo 字符串输出命令 Shell echo命令
#echo 输出字符串
[root@VM_0_8_centos lib]# echo "this is test"
this is test
#echo 输出变量 用$()符号
[root@VM_0_8_centos lib]# echo "$(TZ=GMT-8 date +%Y-%m-%d+%H:%M:%S+%A)"
2020-03-19+18:11:11+Thursday
[root@VM_0_8_centos ~]# echo "PID IS $$" >> file
[root@VM_0_8_centos ~]# echo "now is $(date +%Y-%m-%d+%H:%M:%S)" >>file
[root@VM_0_8_centos ~]# cat file
PID IS 1441
now is 2020-03-19+18:36:10
7.shell 输入输出重定向 Shell 输入/输出重定向
command > file 将输出 重定向到file,如果file不存在,自动创建。
command >> file 将输出以追加的方法 重定向到file,如果file不存在,自动创建。
[root@VM_0_8_centos ~]# echo "PID IS $$" >> file
[root@VM_0_8_centos ~]# echo "now is $(date +%Y-%m-%d+%H:%M:%S)" >>file
[root@VM_0_8_centos ~]# cat file
PID IS 1441
now is 2020-03-19+18:36:10
重定向符号 > 可以用来创建 或者清空文件
#如果file文件存在,就清空文件
#如果file文件不存在,就创建 空文件file
[root@VM_0_8_centos ss]# >file
8 /dev/null Linux 特殊文件,相当于一个垃圾箱。任何重定型到 /dev/null文件的内容都会被丢弃。
- 删除返回结果
- 清空文件内容
#把执行结果 重定向到 /dev/null ====== 删除结果
[root@VM_0_8_centos mm]# echo "this is ah" | grep "ah" > /dev/null
#2.把/dev/null重定向到文件 ======== 清空file1文件内容
[root@VM_0_8_centos mm]# cat /dev/null > file1
9.Linux的命令运行时的3个文件 一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息
把标准输出和错误输出 都重定向的垃圾箱,也就是删掉输出,不管是文件存在的标准输出还文件不存在的错误输出
#把标准输出1 重定向到 /dev/null
#把错误输出2 重定向到 标准输出 也就是/dev/null
root@VM_0_8_centos ~]# ls file 1> /dev/null 2>&1
[root@VM_0_8_centos ~]# ls file1 1> /dev/null 2>&1