shell笔记

1. type commond #查看该命令是否是shell内置命令 例: type cd
2. echo $$ #输出当前进行id
3. . test.sh #在当前进程执行脚本(可以没有执行权限)
4. echo $- #输出 shell 的执行方式 输出结果中包含i为交互式 不包含的为非交互式 . test.sh 为交互式 ./test.sh 为非交互式
echo $PS1 #输出结果非空为交到式 . test.sh 为交互式 ./test.sh 为非交互式
5. shopt login_shell #输出结果为on 为登录式, off为非登录式

6. 变量: 每个变量都是字符串
a=a or a='a' or a="a" #变量等号两边不能有空格 最常见的是加双引号 数字可以不用加引号
echo $a or echo ${a} #使用变量 $ 推荐使用${a} echo "$a" #使用双引号包围可以把变量中的换行输出
a=`ls` or a=$(ls) #把命令的执行结果赋值到变量
readonly a #只读变量
unset a #删除变量
local a # shell的变量是全局变量, 如果要定义为局部变量需加local 类似于javascript
export a=22 # 把变量导出到环境变量 对子进行有效 对多个shell进程无效
7. 特殊变量:
$0 #当前脚本文件名
$n #接收参数
$# #参数的个数
$*/$@ #所有参数 "$*" #多个参数保存成一份数据 "$@" #多个参数保存的是多份数据可以用for循环出来
$? #上一个命令的退出状态或返回值
$$ #当前shell的进程ID

8. 参数: shell 没有形参, 只有实参, 接收参数使用 $num 即$1 $2...

9. 数据类型(字符串/数字)
获取字符串长度: ${#str}
字符串拼接: $a$b #只要放一起就行
字符串指定位置截取: (截取方向都是从左到右)
${str: 2: 9} #从第二个开始截取(起始位置为0)9个字符
${str:0-13:9} #倒数第13个开始截取(倒数起始位置为1)9个字符
${str:2} #从第二个字符截取所有字符
指定字符串截取:
${str#*aa} #截取第一个aa(从左往右数)右边的所有字符串
${str##*aa} #截取最后一个aa(从左往右数)右边的所有字符串
${str%aa*} #截取第一个aa(从右往左数)左边的所有字符串
${str%%aa*} #截取最后一个aa(从右往左数)左边的所有字符串

10. 数组(只支持一维数组不支持多维数组)
arr=(1 2 3 abc) # 定义数组
${arr[1]} #获取元素
${arr[*]}/${arr[@]} #获取数组中所有元素
${#arr[*]}/${#arr[@]} #获取数组的长度
new_array=(${arr[*]} ${arr[*]})/new_array=(${arr[@]} ${arr[@]}) #数组合并成一个数组
unset arr[num]/unset arr #删除数组中的元素或整个数组

11. 关联数组
定义: declare -A arr=(["a"]="abc", ["b"]="bcd")
设置值: arr["c"]="ccc"
访问值: $(arr["a"])
获取所有元素值: ${arr[*]} / ${arr[@]}
获取所有下标: ${!arr[*]} / ${!arr[@]}
获取数组的长度: ${#arr[*]} / ${#arr[@]}
数组的遍历:
echo "输出key和值"
for key in ${!arr[*]}
do
echo "${key}=>${arr[$key]}"
done

posted @ 2022-03-17 16:41  龍飛鳯舞  阅读(28)  评论(0编辑  收藏  举报