1、数学表达式:
num=$[num+1]
num=$((num+1))
num=`expr $num+1`
2、() 与{}
()用户组合执行多个命令;
{}用户组合执行多个命令;
()多个命令在子Shell中执行;{}在当前Shell中执行;
3、(()) 与$(())
(())专用于数值计算;
$(())直接获取数值计算结果;
4、‘ 与 "
‘号内所有字符当作普通字符处理
“号内’$’与’`‘当作特殊字符处理
5、文件重定向
6、声明一个数组
declare -a array_name
array_name=([0]=\'ele1\', [1]=\'ele2\')
array_name[0]=\'ele1\' array_name[1] = \'ele2\'
str="1 2 3 4 5" arr=($str)
read -a array_name <<< "str str2 str3"
IFS=: read -a array_name <<< "str:str2:str3"
array_name=([0]=\'ele1\', [1]=\'ele2\')
➜ ~ array_name=(\'ele1\', \'ele2\')➜ ~ echo $array_name'ele1', 'ele2'➜ ~ echo ${#array_name[*]}2➜ ~ echo ${#array_name[@]}2➜ ~ echo ${#array_name[*]}2➜ ~ echo ${array_name[*]}'ele1', 'ele2'➜ ~ echo ${array_name[n]}➜ ~ echo ${array_name[0]}➜ ~ echo ${array_name[1]}'ele1',
8、销毁整个数组:
unset arr[1] #销毁某个元素
unset arr #销毁整个数组
unset arr[*] #销毁整个数组
unset arr[@] #销毁整个数组
9、关联数组:
declare -A array_name
array_name=([key1]="value1", [key2]="value2")
for key in ${!array_name[*]}
do
echo $key,${array_name[$key]}
done
for value in ${array_name[*]}
do
echo $value
done
array_name=([key1]="value1", [key2]="value2")
for key in ${!array_name[*]}
do
echo $key,${array_name[$key]}
done
for value in ${array_name[*]}
do
echo $value
done
11、字符串长度
➜ ~ echo $a
abcd
➜ ~ expr ${#a}
4
➜ ~ expr "$a":".*"
abcd:.*
字符串查找:
expr index $str "substr"
12、字符串替换:
str="apple, tree, apple tree"
echo ${str/apple/APPLE} # 替换第一次出现的apple
echo ${str//apple/APPLE} # 替换所有apple
echo ${str/#apple/APPLE} # 如果字符串str以apple开头,则用APPLE替换它
echo ${str/%apple/APPLE} # 如果字符串str以apple结尾,则用APPLE替换它
13、字符串选取
expr substr "$str" start_pos end_pos
echo ${str:start_pos}
echo ${str:start_pos:end_pos}
echo ${str:-start_pos:end_pos}
14、截取字符串
echo ${str#a*c} #左边截取最短的匹配
echo ${str##a*c} #左边截取最长的匹配
echo ${str#"a*c"} #左边截取最短的匹配
echo ${str##"a*c"} #左边截取最长的匹配
echo ${str%a*c} #右边截取最短的匹配
echo ${str%%a*c} #右边截取最长的匹配
15、比较
[[ "a.txt" == a.* ]] #pattern compare
[[ "a.txt" = ~ .*\.txt ]] #regex compare
[[ "str1" == "str2" ]]
[[ "str1" < "str2" ]]
16、字符串连接
${str1}${str2}
1、-x将shell所有命令输出到标准输出上
set -x
/bin/bash -x
bash -x bashfile.sh
-n 直输出命令,不执行
-v 将读取到的shell脚本输出到标准输出
trap
trap 'err_func param' ERR|EXIT|DEBUG
2、定义debug调试钩子:
DEBUG="true"
function DEBUG()
{
if [ "$DEBUG" = "" ]; then
$@
fi
}
3、bash作业管理
jobs:查看当前在后台执行的进程
Ctrl+z:建当前的前台进程暂停,变成后台进程
bg:将后台暂停的程序继续执行
fg:将后台进程调到前台继续执行----》fg jobs_num