0、脚本文件结构
#!/bin/bash -v 让bash脚本执行时输出命令
1、文本表示
脚本中的文本表示方式有三种(我是说目前我会的,我是小白):
- 双引号:可以包含文本、变量、转义字符
- 单引号:不管里边写什么都会被看做字符本身
- 反引号(就是键盘左上角那个很少被用到的~那个键):包含命令,会将命令的返回值赋给左侧变量。
然后没有被包裹的文本或表达式通常是省略了双引号,例如B=${A}其实是B="${A}"省略了双引号。
ps: echo打印包括转义字符的文本时需要-e参数,经试验,单引号也可
2、read
read -p "提示语" "变量名"
其他可用参数:
-s 关闭回显(密码)
3、变量的作用范围
- shell的命名空间没有继承关系,子shell不享用父shell的命名空间
- 默认局部变量
- export x 将x变量发布为全局变量
- export -n x取消该变量的全局属性
4、脚本中外部数据(我起的名字)的获取
主要是获取当前进程的执行名字、参数、PID、shell使用选项等数据,示例如下,vi test 创建脚本后写入
echo $0"--这个程式的执行名字"
echo $2"--这个程式的第n个参数值,n=1..9"
echo $*"--这个程式的所有参数,此选项参数可超过9个。"
echo $#"--这个程式的参数个数"
echo $$"--这个程式的PID(脚本运行的当前进程ID号)" &
echo $!"--执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)"
echo $?"--执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)"
echo $-"--显示shell使用的当前选项,与set命令功能相同"
echo $@"--跟$*类似,但是可以当作数组用"
使用带参数的方式执行该脚本
sh test 11 22 33
输出结果:
test--这个程式的执行名字
22--这个程式的第n个参数值,n=1..9
11 22 33--这个程式的所有参数,此选项参数可超过9个。
3--这个程式的参数个数
14143--执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
14142--这个程式的PID(脚本运行的当前进程ID号)
0--执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
hB--显示shell使用的当前选项,与set命令功能相同
11 22 33--跟11 22 33类似,但是可以当作数组用
ps:第五行的14143输出的是第五行echo的背景进程的PID,这也是脚本中第五行使用&的目的,也可以看到由于&后台执行导致第五行和第六行执行顺序颠倒了
5、用于判断的逻辑测试
格式:
! [ 表达式 符号 表达式 ]
注意大括号和符号前后均应有一个空格。
其中表达式可用上述变量,符号可用:
eq 【等于】
-ne 【不等于】
-gt 【大于】
-ge 【大于等于】
-lt 【小于】
-le 【小于等于】
结合第4点,即可使用 if [ "$#" -eq "2" ];then 判断脚本输入参数数量是否为2个
emm:零零碎碎
- 提前结束脚本 exit
- 左移n位 shift n