shell基础:
sh命令: 参数: -c string 将string当作命令来执行。 -x xxx.sh 开启调试模式,shell在执行脚本的过程中把它实际执行的命令都显示出来,并且在命令的行首显示一个"+"号(shell内置变量PS4='+ '),同set -x。 补充:可以通过修改$PS4的值,从而使每一条实际执行的命令前面显示其行号以及所属的函数名。eg:先执行export PS4='+{$LINENO:${FUNCNAME[0]}} ', 然后再使用“-x”选项来执行脚本。
!/usr/bin/env bash
说明:脚本解释器在linux中可能被安装在不同的目录,而env可以在系统的PATH目录中查找,故脚本用env启动。
set命令: set 列出所有的环境变量。
参数: -参数 设置某个参数 +参数 取消某个参数的设置。 eg: set -e 当命令的返回值不等于0(即执行该命令报错)时,立即退出shell。 set +e 表示取消-e参数,即当命令的返回值不等于0时,不会立即退出shell,而是会继续执行shell脚本。 -x 开启调试模式。
命令行参数 $0 脚本的名字 $1, $2, ..., $9 脚本第1个到第9个命令行参数 $# 命令行参数的个数 $* 以“参数1 参数2 参数3..” 的形式返回所有命令行参数的值 $@ 以“参数1”“参数2”“参数3”.. 的形式返回所有命令行参数的值 $? 最后一条命令的退出状态码(执行成功返回0,执行失败返回1) $$ 正在执行的进程的ID(PID)
变量: 引用变量: ${variable} $variable
清除变量: unset variable变量替换 $variable 保存在variable中的值 ${variable} 保存在variable中的值 ${variable:-string} 如果variable的值非空,则值为variable,否则值为string ${variable:+string} 如果variable的值非空,则值为string,否则值为空 ${variable:=string} 如果variable的值非空,则值为variable,否则值为string且variable的值设置为string ${variable:?string} 如果variable的值非空,则值为variable,否则显示string并退出引号的说明: 单引号括起来的的字符都作为普通字符对待。 双引号括起来的字符,除$、\、'(单引号)、"(双引号)之外,其余字符作为普通字符对待。 反引号括起来的字串被shell解释成命令,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号部分。将命令的执行结果赋值给变量: # 将某个shell命令的执行结果赋给某个变量。注:赋值号“=”的左右两边不能直接跟空格,否则shell会将其视为命令。 variableName=`command` variableName=$(command)定义系统提示符的变量 eg:PS1='[\u@\t \w]\$ ' \u:显示当前用户名 \h:显示简写主机名。如默认主机名“localhost” \$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$” \w:显示当前所在目录的完整名称 \W:显示当前所在目录的最后一个目录 \t:显示24小时制时间,格式为“HH:MM:SS” \T:显示12小时制时间,格式为“HH:MM:SS” \d:显示日期,格式为“星期 月 日” \A:显示24小时制时间,格式为“HH:MM” \#:执行的第几个命令
条件判断: 概念:表达式用中括号[]或双中括号[[]]括住,条件表达式与左右方括号之间必须都保留一个空格。 说明:单中括号中的变量必须要加双引号,双中括号中的变量不用加双引号。 举例:[ -z "$pid" ] VS [[ -z $pid ]] 参数: 逻辑运算符: -a expr1 -a expr2 逻辑与 -o expr1 -o expr2 逻辑或 ! 逻辑非 数值判断: -eq num1 -eq num2 是否相等 -ne num1 -ne num2 是否不相等 -gt num1 -gt num2 是否大于 -ge num1 -ge num2 是否大于等于 -lt num1 -lt num2 是否小于 -le num1 -le num2 是否小于等于 字符串判断: = str1 = str2 字符串是否相等 != str1 != str2 字符串是否不等 -n -n str1 字符串是否非空 -z -z str2 字符串是否是空串(长度是否等于0 z:zero) 文件判断: -e -e filenaem 文件是否存在 -r -r filename 文件是否存在且可读 -w -w filename 文件是否存在且可写 -s -s filename 文件是否存在且长度非0 -f -f filename 文件是否存在且是普通文件 -d -d filename 文件是否存在且是一个目录 -L -L finename 文件是否存在且是一个链接