基础
常用命令
# 输出
echo ""
echo -e "" # 支持特殊字符,包括颜色 \t \n
echo -e "\e[1;30m text \e[0m" # ;30m到;36m是前景色,;40m到;46m是背景色
echo -n "" # 不换行
# 历史命令
history
history -c # 清空历史记录
history -w # 保存到文件 ~/.bash_history
## 历史保留的命令的条数在 /etc/profile 的环境变量HISTSIZE的值
# 别名
alias hel="echo hel"
unalias hel
# 输入重定向
< # 后面跟文件就是把文件的内容输入
<< # 当出现与开头相同的内容时将中间的内容输入
[root@K8S-Deploy ~]# wc -l <<EOF
> 11
> 22
> 33
> EOF
3
# 将内容片段作为输入
# 特殊符号
() 开启子shell,隔离变量作用域
[] 用于变量测试
$() 包含命令的结果,结果的值保存给前面的变量
$(( $a + $b )) # 数学计算
# 变量
## shell中默认的变量的值都是字符串类型,如果需要数学计算则需要类型转换
# 设置shell环境
set -u # 调用未声明的变量会报错,如果不设置按默认情况不会报错
set -x # 执行命令前先输出命令
set # 显示所有的用户变量
unset # 删除变量
# 环境变量
export name=value # 设置环境变量
unset name # 删除环境变量
# 本地语言环境
echo $LANG
# 或
locale
# 位置参数
$0 # 命令本身
$1-$9 # 第1-9个参数
${10-999} # 第10-999个参数
$# # 参数个数
$* # 所有参数组成的一个字符串整体
$@ # 所有参数组成的一个数组
# 预定义变量
$? # 上一条命令返回状态
$$ # 当前PID
$! # 后台最后一个进程的PID
# 声明变量类型declare
declare [+-]类型 变量名
## -是加上某类型
## +是减去某类型
## 类型
a 数组
i 整数
r 常量,即只读的变量readonly
x 环境变量
p 输出变量类型
# 交互式读取用户输入
read
-t # 超时时间,秒
-p # 提示字符串
-n # 允许输入的字数
-s # 像输入密码一样,不显示输入内容
变量测试与内容置换
登录主机欢迎提示语
- motd(Message Of The Day)每日消息
高级
正则表达式
字符串处理
# 列切分
cut
-d # 指定分隔符,默认空格
-f # 指定需要提取某一列 如1,3,7...
# 格式化输出
printf
# 排序
sort
# -t 分隔符
# -k 第几列
# -n 按数字排序
# -r 逆序
# -u 去重
# 去重
uniq
# -i 忽略大小写
# 统计
wc
# -l line
# -w word
# -c character
三剑客
# awk
awk '条件{动作} 条件{动作}...' 文件名
# $0 表示整行内容
# $1-$n表示第n列
# NF 行共有多少列
# NR 当前是多少行
# FS 指定分隔符
# 条件
# 可以写BEGIN|END,做初始化和结束后的动作
# 可以写正则表达式
# 可以写$n >= 80 的数值逻辑关系判断
# 可以写$n ~ "M" 的字符串包含关系
# awk脚本
# 把''里面的条件和动作都写到一个脚本文件demo.awk
# 然后使用 awk -f demo.awk filename 即可
# 里面也可以写function 定义函数
# sed
sed 选项 '[动作]' 文件名
# -n 只输出处理的行,默认全部输出
# -i 将修改写入文件
# -r 支持扩展正则
# -e 执行多个动作
# 动作
# 增 a|i sed '3i 内容' 文件名 # i前面插入,a后面插入
# 删 d sed '2-5d' 文件名 # 删除2-5行
# 改 c sed '3c 内容' 文件名 # 第三行替换内容
sed '[行号]s/旧内容/新内容/g' 文件名 # 查找替换,可以不写行号就是全局替换
# 查 p sed -n '3p' 文件名 # 显示第三行
# grep
条件判断
# 判断文件类型
-e 是否存在
-b 块设备
-c 字符设备
-d 目录
-f 文件
-s 空文件
# 判断文件权限
-r 读
-w 写
-x 执行
# 整数比较
-eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
# 字符串判断
-z 是否为空
-n 是否非空
== 是否相等
!= 是否不相等
# 逻辑与或非
! 取反
-a and
-o or
流程控制
# if/else
if [ ];then # 因为是2条语句需要;隔开
# 执行语句
fi
if [ ]
then
fi
if [ ]
then
# 执行
else
# 执行
fi
if [ ]
then
# 执行
elif [ ];then
# 执行
else
# 执行
fi
# case
case 变量 in
"值1")
# 执行
;;
"值2")
# 执行
;;
*)
# 执行
;;
esac
# for
for 变量 in array
do
# 执行
done
# while
while [ 条件 ]
do
# 执行
done
# until 条件是假是才会执行
until [ 条件 ]
do
# 执行
done
# 函数
function name(){
# 执行
# echo $0 $1 ...
}
name 1 2
# 退出
exit
break
continue
PPT
shell编程.pptx