bash脚本
命令使用
- `cmd`,$(cmd) // 反引号执行命令,可以将结果保存到变量
- "$(dirname "$path")" // 获取path的上级目录全路径
- "$(basename "$path")" // 获取path的名称
- echo PWD:`pwd` // 显示当前路径
- exit // 退出
- $(date +%s) // 自1970年到现在的秒数
- $(date +%Y%m%d-%H%M%S) // 年月日时分秒
- ls $DIR | grep .jar | awk '{print "'$DIR'/"$0}' | tr "\n" ":" // 把目录里的所有jar文件用":"组成字符串
- . data.properties,source data.properties // 加载属性文件的变量成为临时环境变量
- .source common.sh // 加载通用函数
- grep $old -rl $path | xargs -r sed -i "s#$old#$new#g" // 替换path下所有文件内容old->new
- var=${1:-"DefaultValue"}
// 设置var值,输入参数1不存在则是默认值。参考
参数使用
- 输入参数使用:$N。$1第一个参数
- 变量定义和赋值,等号左右不能有空格:P1="ppp"
- 变量使用:${P1},$P1
- declare -a array // 数组定义
- declare -A map // 字典定义
常用语法
获取函数返回值
function fa() {
name=$1
echo hello${name}
}
name1=andrew
text=$(fa ${name1})
获取输入
read -e -p "Please input the correct option: " Number
if [[ ! "${Number}" =~ ^[1-5,q]$ ]]; then
echo "${CFAILURE}input error! Please only input 1~4 and q${CEND}"
else
case "${Number}" in
判断
// 输入参数1是否存在
if [ -n "$1" ] ;then
echo "exist"
else
echo "not exist"
fi
// 变量是否存在
if [ ! ${var} ]; then
fi
// 大小写忽略的正则式匹配
if echo "${DB_Ver}" | grep -Eqi '^8.0.|^5.7.|^10.2.'; then
fi
// 命令执行
if ! command; then
echo "cmd failed";
exit 1;
fi
// 命令执行结果判断
netstat -apn | grep 8080
if [ "$?" == 0 ]; then // 命令返回是空
fi
// 目录存在
if [ ! -d "${dir}" ]; then
fi
// 文件存在
if [ -f "${file}" ]
then
fi
循环
for item in ${array[@]}; do
echo "${item}"
done
for k in ${!map[*]}; do
key=${k}
val=${map[$k]}
done
方案
等待服务启动
while [ -n "`ps -ef | grep mysql | grep -v grep | awk '{print $2}'`" ]; do
sleep 1
done
属性文件读取
while read -r line; do
if [ "$line" != "" ]; then
IFS='=' read -r k v <<< $line
echo "load key($k), val($v)"
map[$k]=$v
fi
done < $file
资料
语法
工具
方案