shell 解释器/编程语言
语法和命令
自定义变量 = 默认字符串 作用于当前shell 环境变量 export, decalre -x 作用于当前shell和子shell 系统环境变量 启动加载 作用于所有shell
父子shell: 暂停 当前shell(父进程)→→→→→继续下一条命令 被父进程触发的子进程
declare -给变量设定类型属性 +取消变量的类型属性 -a 将变量声明为数组 -i 将变量声明为整形 -x 将变量声明为环境变量 -r 将变量声明为只读变量 -p 显示指定变量的被声明的类型
管道与管道符 | ,作用是将前一个命令的结果传递给后面的命令
要求:管道右侧的命令必须接受输入标准才行,比如grep命令,ls,mv等不能直接使用,可以用xargs预处理
1判断命令 test condition [ condition ] [[ condition ]]
整数测试 test n2 等于 -lt 小于 -gt 大于
字符串测试 test -z str_a=$str_b相等
文件测试 test -e /dmt &&echo "exist" 存在 test -f /usr/bin/npm&&echo "file exist"存在普通
双中括号更丰富
2分支语句
if condition;then 程序段 elif condition;then 程序段 esle 程序段 fi
caee $变量in: "第一个变量内容") 程序段 ;; "第一个变量内容") 程序段 ;; *) #⃣默认分支 程序段 ;; esac #⃣结尾
3🔁循环 while循环 which condition ; do 程序段; done
until循环 until condition ; do 程序段 ;done
for循环 for var in[words…]; do 程序段;done
4函数 funcName(){ echo "abc"; }
function funcName.........
函数内使用local定义局部变量 unset撤销
函数内return仅代表执行状态,不代表执行结果,存储在$?中
返回结果一般使用echo,print,在外面使用$(),“获取结果
5模块化:当前shell内执行函数文件 soucre[函数库的路径]
6常用命令
grep
查找错误日志:grep -n " ERROR" -A3 -B3 cloudfun.log
统计次数:grep -n " ERROR" -c cloudfun.log
sort 指定分隔符后以第三列进行排序:sort -t " " -k 3
wc 统计出现的行数,单词数,字符数 wc-lwm
head 查看前十行:head -n 10 cloudfun.log 查看后十行:tail -n 10 cloudfun.log
tail 等待追加内容:tail -f -n 10 cloudfun.log
cut 对数据行的内容进行处理:cut -d " " -f 3
find 文件和目录查找
xargs 参数处理
which 查找命令路径
shell展开 大括号展开 #⃣字符串序列 a{b,c,d}e→abe,ace,ade #⃣表达式序列 {1..5}→{1,2,3,4,5} {1..5..2}→{1,3,5} 也可用于字母,但字母不能设置增量
波浪号展开〰️ 会将〰️替换成主目录的值 〰️用户名 指定用户的主目录 〰️+-表示当前工作目录和上一个工作目录
参数展开 1间接参数展开 (#parameter) 3空参数处理 (parameter:=word) 为空替换并赋值给para (parameter:+word) 不为空替换 4参数切片 (parameter:offset:length) 5参数部分删除 (parameter%%word) 最大限从后面截取word (parameter#word) 最小限度从前面截取word (parameter##word) 最大限度从前面截取word
数学运算 $((数学表达式))
文件名展开 当单词没有被引号包裹,且其中出现*,?,[ 字符,shell会按正则匹配查找文件名进行替换,没找到则保持不变
调试
set命令 -u 遇到不存在的命令会报错,并停止执行 -x 运行结果之前,先输出执行的那一行命令 -e 只要发生错误就停止执行 -o pipefail 管道符连接的,只要一个子命令失效,管道命令就失效,脚本终止执行