主要用于系统管理 自动化管理脚本
自定义变量
变量默认都是string类型 定义变量=两边不能有空格 例: x=4 name="test 1" 变量调用 调用时开头需要加$符号 echo $x 变量查看 set [选项] -u 未声明变量报错 变量删除 unset [变量名](变量名不加$)环境变量
设置环境变量 export 变量名=变量值 或 变量名=变量值 export 变量名 env 查看环境变量 unset 变量名 删除(变量名不加$) 常见环境变量 PATH变量 系统查找命令的路径 echo $PATH 查看 临时生效 PATH="$PATH":/apps/sh 增加PATH变量值(变量叠加)位置参数变量
$n n为数字 $0代表命令本身 $1-$9代表第一到第九个参数,十以上${10} $* 返回命令行中所有参数 参数看成一个整体 $@ 返回命令行中所有参数 每个参数区别对待 $# 返回命令行中参数的个数预定义变量
$? 最后一次执行的命令的返回状态 0 表示执行正确 非0 命令作者自定 $$ 当前进程的ID号(PID) $! 后台运行的最后一个进程的ID号(PID)接收键盘输入 read [选项] [变量名] 选项:
-p 提示信息 : 在等待read输入时,提示信息 -t 秒数: read命令会一直等待用户输入,此项指定等待时间 -n 字符数: read命令只接受指定的字符数,就会执行 -s 隐藏输入数据shell运算符
1.declare 声明变量类型 declare[+/-][选项] 变量名 - 给变量设定类型属性 + 取消变量的类型属性 -a 将变量声明为数组型 -i 整型 -x 环境变量 -r 只读变量 不能修改和删除 -p 显示指定变量的被声明的类型 例:b=1 c=2 declare -i a=$b+$c echo $a declare -p a 声明数组变量 arr[0]=a arr[1]=a1 arr[2]=a2 declare -a arr[3]=a3 //两种声明方式 echo ${arr} 默认第一个下标的值 echo ${arr[2]} 下标为2的值 echo ${arr[*]} 所有 2.数值运算的方法 expr或let运算工具 例: aa=11 bb=22 cc=$(expr $aa + $bb) (注:左右两侧必须有空格) let cc=$aa+$bb $((运算式)) 或 $[运算式] 例:$(($aa + $bb)) $[$aa + $bb]环境变量配置文件
重新加载配置文件 source 配置文件 或 . 配置文件 配置文件位置 /etc/profile 登录成功配置文件 设置基本环境变量 调用/etc/profile.d/*.sh 调用~/.bash_profile /etc/profile.d/*.sh 启动/etc/profile.d/*.sh 下shell脚本 (加载语言) ~/.bash_profile 调用~/.bashrc 加载用户bin目录 环境变量 ~/.bashrc 设置别名 /etc/bashrc 设置ps1 判断是否登录执行shell 调用/etc/profile.d/*.sh 根据顺序加载配置文件 ~/.bash_logout 注销时生效的环境变量配置(默认是空的) ~/.bash_history 历史命令保存文件(退出登录后才把当次登录记录写入文件) /etc/issue 本地终端登录提示信息 /etc/issue.net 远程终端提示信息(由ssh配置文件/etc/ssh/sshd_config决定是否显示,加入"Banner /etc/issue.net"才能显示,需要重启ssh服务) /etc/motd 登录后提示信息 注:~用户家目录下 对当前用户生效 /etc/下的文件 对所有用户生效正则表达式
通配符 * 匹配任意字符 ?匹配任意一个字符 [] 匹配中括号内的一个字符 基础正则 * 前一个字符匹配0次或多次 grep "aa*" test.log . 匹配除了换行符外任意的一个字符 ^ 行首 grep "^aa$" test.log $ 行尾 [] 匹配括号中指定的任意一个字符,只匹配一个字符 [^a-zA-Z0-9] [^]取反 \ 转译符 \{n\} 重复出现n次 \{n,\} 最少匹配n次 \{n,m\} 最少匹配n次到m次 grep 行提取命令 -v 取反 例:grep "正则" 文件名 ps -ef | grep "正则" 管道符 cut 列提取命令 -f 列号: 提取第几列 -d 分隔符: 按照指定分隔符分割(默认制表符) 例:cut -f 2 test.log 截取第二列 cut -f 2,4 -d ":" test.log 以":"分割截取第二列和第四列 限制: 需要分隔符,文件需要一定格式 printf 格式化输出命令 printf '输出类型输出格式' 输出内容 输出类型 %ns 输出字符串。n指代输出n个字符 %ni 输出整数。 %m.nf 输出浮点数 m和n是数字,指代输出整数位和小数位 例:%8.2f 输出8位 其中2位小数,6位整数 输出格式 \a 输出警告声音 \b 输出退格键(backspace键) \f 清除屏幕 \n 换行 \r 回车 \t 水平输出退格键(tab键) \v 垂直输出退格键(tab键) 例:printf '%s\t%s\t%s\n' 1 2 3 4 5 6 7 8 9 printf '%s' $(cat test.log) awk 字符串截取 awk '条件1{动作1}条件2{动作2}...' 文件名 例:awk '{printf $2 "\t" $4 "\n"}' test.log ($2表示第二列 $4表示第四列,没有条件直接执行) df -h | awk '{print $5}' BEGIN END cat /etc/password | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}' sed 字符串替换 sed [选项] '[动作]' 文件名 选项: -n 把经过sed命令的处理的行输出到屏幕 -e 允许输出多条sed命令编辑 -i 修改结果直接修改文件,而不是由屏幕输出(必须加-i 才能修改) 动作: a 追加 c 行替换 i 插入 d 删除 p 打印 s 字符串替换 例:sed -n '2p' test.log 打印输出第二行 sed -i '2,4d' test.log 删除2到4行 sed -e '2,4d;s/aa/bb' test.log 删除2到4行 并 将全文aa替换成bb sed '2a test' test.log 第二行追加test字符 sed '2i test' test.log 第二行前面插入test字符 sed '2c test' test.log 第二行替换test sed '2s/aa/sb/g' test.log 第二行替换aa替换成sb sort 排序命令 sort [选项] 文件名 选项: -f 忽略大小写 -n 以数值型排序,默认使用字符串型 -r 反向排序 -t 指定分隔符,默认是制表符 -k n[,m] 按照指定的字段范围排序 第n个字段开始 m字段结束(默认到行尾) 例:sort /etc/passwd 按开头字母a-z排序 sort -r /etc/passwd 按开头字母z-a排序 sort -n -t ":" -k 3,3 /etc/passwd 根据:分隔符从第3个字段按数值排序 wc 统计命令 wc [选项] 文件名 选项: -l 只统计行数 -w 只统计单词书 -m 只统计字符数 例: wc test.log条件判断与流程控制
文件类型判断 -d 文件 判断文件是否为目录 -e 文件 判断文件是否存在 -f 文件 判断文件是否为普通文件 -r 文件 判断文件是否有读权限 -w 文件 判断文件是否有写权限 -x 文件 判断文件是否有执行权限 文件1 -nt 文件2 判断文件1的修改时间是否比文件2新 文件1 -ot 文件2 判断文件1的修改时间是否比文件2旧 文件1 -ef 文件2 文件1和文件2inode号一致,判断文件1和文件2是否为同一个文件 例: [ -d /apps/test ] && echo yes || echo no 字符串判断 -z 字符串 判断字符串是否为空 -n 字符串 判断字符串是否非空 字符串1 == 字符串2 判断字符串是否相等 字符串1 != 字符串2 判断字符串是否不相等 多重判断 条件1 -a 条件2 逻辑与 条件1 -o 条件2 逻辑或 !条件 条件取反 if 语句 if [ 条件表达 ];then 程序 fi 或者 if [ 条件判断 ] then 程序 elif [ 条件判断 ] then 程序 else 程序 fi case 语句 case $变量名 in "值1") 程序1 ;; "值2") 程序2 ;; *) default程序 ;; esac for 循环 for 变量 in 值1 值2 值3 do 程序 done 或 for ((初始值;循环控制条件;变量变化)) do 程序 done while 循环 while [ 条件判断 ] do 程序 done until 循环(与while相反 条件成立终止循环) until [ 条件判断 ] do 程序 done