命令错误 后面的命令继续执行
语法错误 后面的命令不执行
bash -n 检查语法错位
bash -x 查看脚本的执行过程 【排错】
++文件属性上的 显示是嵌套命令
变量
- 引用变量要加$符号 echo 是显示字符串的 如果命令能识别变量 可以不加$ 识别不了就压加$
- 变量尽量用“ ”引起来 保留里面的格式
name =`whoami` echo “$name” 用双引号引起来 保留里面的格式
- 弱类型 不指令类型
- 强类型 指令类型
- 变量的命令法则
- 不能以数字开头命令
- 关键字不能命令
- 大驼峰 第一个单词字母大写
- 小驼峰 第二个字母大写
- 局部变量
- 普通变量
- 工作范围是当前进程
- 看当前进程的命令 开启一个脚本就相当于在当前bash开启了个子进程
- echo $$ 表示当前的进程编号
- echo $PPID 查看父进程
- pstree -p 树状的显示进程
- 全局变量 允许往下传 不能往上传
- export 跟赋值的名字(不加$) 把普通变量变成环境变量 或者 export name=多少
- 父进程的变量可以一直往下传 子进程的变量不能往下传
- 显示所有的环境变量 ;
env
printenv
export
declare -x
- set 显示的变量是最全的
- unset 删除变量 不删除变量 它的内存空间是不会释放的
- $SHLVL 嵌套深度 查看进程嵌套了几次
- echo $_ 上一个命令的最后一个参数调用 用echo 已字符串的形式显示
- 只读变量 (常量) 只能声明 不能修改
- readonly 定义常量
- declare -r 查看常量 =readonly -p
- (命令)开启的子shell 一次有效
- name=wang ;echo $name( echo $name) 如果括号里的name没赋值 就不会开启子进程 就等同于外面的name
- { ;} 影响当前shell环境
- 10 以上要用花括号{}
- scp ‘你要传的文件 名’ ‘对方的用户名’@‘对方的IP地址’:‘对方指定的目录路径’ (跨主机传输文件) :你要传的文件名要有执行权限 还要知道对方用户的密码
- 位置变量
- 在脚本代码中调用通过命令行传递给脚本的参数
- $1 $2 $3 … :对应第1 第2,等参数
- $0 ; 命令本身 ·basename $0 去掉文件名的路径 显示文件名 ·
- $* 所有的参数 当系统会把所有的参数看成一个字符串
- $@ 也表示所有的字符串 但是每个参数为独立字符串
- $# 传递给脚本参数的个数
- set — 清空所有位置变量
- $@ $* 只有被双引号包起来的时候才会有差异
- shift 【n】 换位置 顶掉前面几个 成为第一个要执行的参数
退出状态查看
- 0 表示成功 1.。。255 表示失败
- $? 变量保存最近的命令退出状态 echo $? 查看
- 在脚本中 用echo $? 查看成功与失败 是取决 脚本中最后一条命令是否成功或失败 如果是语法错误 则不执行后面的命令 即echo $? 为1-255
- 在脚本后面 输入 exit后加 数字 那么你echo $? 的值就 你指定的 exit 后跟的数字
算数运算let
- +加 , -减, *乘,/除,%取余,**乘方
- 算数运算的几种格式
- let name=name1+name2
- name=$[name +name2]
- expr 后面直接 2+3 就可以算出
- declare -i var =数值
- let x++ = x=x+1 let x– = x=x-1 let count+=3 自加3后赋值
- declare -i x+=2 = x=x+2
与 或
- &与 并且and
- 0&0=0
- 0&1=0
- 1&0=0
- 1&1=1
- | 或者 or
- 0|0=0
- 0|1=1
- 1|0=1
- 1|1=1
- 短路或【或者】 以 || 表示
- cmd1 || cmd 2 ; cmd1 为真 cmd2不执行 ;cmd1为假 cmd2 要执行
- 它的特点是优先找真 找不着真就往后执行
- FALSE || { echo cmd1 ;echo cmd2 } 为假时 ||的后面加大括号 里面的命令可以都执行
- 短路与【并且】 以$$ 表示
- cmd1 && cmd 2
- cmd1 为假 cmd2 就不执行 ; cmd1 为真 cmd2 要执行
- &&短路与的特点是 优先找假 找不到假就往后执行
- 异或 xor
- 两个值是异样的 结果为真
- 两个值是一样相同的 结果为假
- 非 取反 : !
- tmp 临时变量 可以实现两个数互换
即: a=4 b=6 tpm=$a (把a的值临时放在tmp里) 再使a=$b b=$tpm 实现装换
条件测试 test 或者 [ ]
- test 格式 test $str1 = $str2 或者 【 $str1 = $str2 】
- 比较字符串 != 是否 不等
- = 是否相等
- != 是否不等于
- < 是否
- -z 看字符串是否为0 空 空为真 不空为假
- -n 看字符是否为非空 不空为真 空为假 或者 【 】表示
- -v 判断变量是否被设置的
- =~ 左边的字符串是否能够被右侧的pattern(可以写扩展正则表达式)所匹配
注意 : 此表达式一般用在【【】】中 ;扩展的正则表达式
注意 用于字符串比较时的用到的操作都应该使用引号
【【 == * 星为通配符 】】 == 相等 != 不等
比较数字的
- -eq 相等
- -nq 不等
- -lt 小于
- -le 小于等于
- -gt 大于
- -ge 大于等于
- -ne 是否不等于
变量在中括号里写的话 要加双引号引起开 避免出现问题
- 文件判断 file
- -a 判断文件是否存在 -e 一样
- -b 判断文件是否为块文件
- -c 判断文件是否为字符文件
- -d 判断文件是否为文件夹
- -f 判断文件是否问普通文件
- -L判断文件是否为软链接
- -h 存在且为符号链接文件
- -p 是否存在且为命令管道文件
- -S是否存在且为套接字文件
- -s 是否存在且非空
- -N 文件自从上一次被读取之后是否被修改过
- -O 当前有效用户是否为文件属主
- -G 当前有效用户是否为文件属组
- -r 判断文件是否可读
- -w 判断文件是否可写 权限是看的实际权限
- -x 判断文件是否有执行权
- -u 是否有suid权限
- -g 是否有sgid 权限
- -k 是否有sticky 权限
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96002