字节青训营第三节笔记

83 阅读3分钟

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 n1eqn1 -eq n2 等于 -lt 小于 -gt 大于

字符串测试 test -z stra为空n非空str_a 为空 -n 非空 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)引用的参数并不是parameter而是他的实际值2参数长度(!parameter) 引用的参数并不是parameter而是他的实际值 2参数长度(#parameter) 3空参数处理 (parameter:word)为空替换(parameter:-word) 为空替换 (parameter:=word) 为空替换并赋值给para (parameter:?word)为空报错(parameter: ? word) 为空报错 (parameter:+word) 不为空替换 4参数切片 (parameter:offset)(parameter:offset) (parameter:offset:length) 5参数部分删除 (parameter(parameter%word) 最小限度从后面截取word (parameter%%word) 最大限从后面截取word (parameter#word) 最小限度从前面截取word (parameter##word) 最大限度从前面截取word

数学运算 $((数学表达式))

文件名展开 当单词没有被引号包裹,且其中出现*,?,[ 字符,shell会按正则匹配查找文件名进行替换,没找到则保持不变

调试

set命令 -u 遇到不存在的命令会报错,并停止执行 -x 运行结果之前,先输出执行的那一行命令 -e 只要发生错误就停止执行 -o pipefail 管道符连接的,只要一个子命令失效,管道命令就失效,脚本终止执行