Shell编程
echo输出命令
语法:echo 【选项】【输出内容】
-e 支持反斜线控制的字符转换
历史命令
语法:history 【选项】【历史命令保存文件】
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件 .bash.history
命令别名和常用快捷键
alias 别名=‘原命令’ 设置命令别名
alias 查询命令别名
vi /root【用户名】/.bashrc 让别名永久生效
unalias 别名 删除别名
输出重定向
命令 &>文件 以覆盖的方式把正确输出和错误输出都保存到同一个文件当中
命令 &>>文件 以追加的方式吧正确输出和错误输出都保存到同一个文件当中
输入重定向
wc 【选项】【文件名】
-c 统计字节数
-w 统计单词数
-l 统计行数
多命令顺序执行
; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1&&命令2 当命令1正确执行,命令2才会执行,否则命令2不会执行
|| 命令1||命令2 当命令1执行不正确,命令2才会执行,否则不会执行
管道符
命令1 | 命令2 命令1的正确输出作为命令2的操作对象
grep 【选项】“搜索内容“ 文件名
-i 忽略大小写
-n 输出行号
-v 反向查找
–color=auto 搜索出的关键字用颜色显示
通配符
?:匹配一个任意字符
*: 匹配0个或任意多个任意字符,可以匹配任意内容
[]:匹配中括号中任意一个字符
[-]:匹配中括号中任意一个字符,-代表一个范围
[^]:表示匹配不是中括号中的一个字符
特殊字符
‘’ 在单引号中所有的特殊字符都没有特殊含义
“” 在双引号中特殊字符没有特殊含义,但是’’$’’ ‘’`’’ ‘’’ 是例外,分别表示调用变量的值,引用命令和转义符
`` 反引号括起来的内容是系统命令,在Bash中会先执行它
$() 和反引号作用一样,用来引用系统命令
$ 用于调用变量的值
\ 转义符,在\之后的特殊字符将失去特殊含义,变为普通字符
设置环境变量
export 变量名=变量值 申明变量
env 查询变量
unset 变量名 删除变量
位置参数变量
$n 这个变量n为数字,1-9代表第一道第九个参数,十以上的参数需要用大括号包含
$* 这个变量代表命令行中所有的参数,并且把所有的阐述当成一个整体
$@ 这个变量代表命令行中所有的参数,,不过把每个参数区分对待
$# 这个变量代表命令行中所有参数额个数
预定义变量
$? 最后一次执行的命令的返回状态,如果返回的值为0,则代表上一次执行正确,否则不正确
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
接收键盘输入
语法:read 【选项】 【变量名】
-p 提示信息 :在等待read输入时,输出提示信息
-t 秒数 :read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s :隐藏输入的数据,适用于机密信息的输入
declare声明变量类型
语法:declare 【+/-】【选项】 变量名
-:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型(integer)
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型
正则表达式
- 前一个字符匹配0次或任意多次
. 匹配除了换行符以外任意一个字符
^ 匹配行首
$ 匹配行尾
[] 匹配中括号中指定的任意一个字符,只匹配一个字符
[^] 匹配除了中括号以外任意一个字符
\ 转义符
{n} 表示其前面的字符恰好出现n次
{n,} 表示其前面的字符出现不小于n次
{n,m} 表示其前面的字符至少出现n次,最多出现m次
cut字段提取命令
语法:cut [选项] 文件名
-f 列号 提取第几列
-d 分隔符 按照指定分隔符分割列
printf命令
语法:printf ‘输出类型输出格式’ 输出内容
输出类型:
%ns 输出字符串 n是数字指代输出几个字符
%ni 输出整数 n是数字指代输出几个数字
%m.nf 输出浮点数,m和n是数字,指代输出的整数位数和小数位数
输出格式:
\a 输出警告声音
\b 输出退格键
\f 清除屏幕
\n 换行
\r 回车
\t 水平输出退格键,也就是Tab键
\v 垂直输出退格键,也就是Tab键
awk命令
语法:awk '条件1{动作1}条件2{动作2}…'文件名
一般使用关系表达式作为条件
动作:格式化输出,流程控制语句
sed命令
语法:sed 【选项】‘【动作】’ 文件名
-n 把经过sed命令处理的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a\ 追加,在当前行后添加一行或者多行,添加多行时,除了最后一行外,每行末尾要用‘\’代表完结
c\ 行替换,用c后面的字符串替换原数据行,替换多行时,除了最后一行外,每行末尾要用‘\’代表完结
i\ 插入,在当前行的前面插入一行或多行,插入多行时,除了最后一行外,每行末尾要用‘\’代表完结
d 删除,删除指定的行
p 打印,输出指定的行
s 字串替换,格式为 行范围s/旧字串/新字串/g
排序命令sort
语法:sort 【选项】 文件名
选项:
-f 忽略大小写
-n 以数值型进行排序,默认使用字符串型进行排序
-r 反向排序
-t 指定分隔符,默认的分隔符是制表符
-k n[,m] 按照指定的字段范围排序,从第n个字段开始,m字段结束(默认到行尾)
统计命令wc
语法:wc 【选项】 文件名
选项:
-l 只统计行数
-w 只统计单词数
-m 只统计字符数
按照文件类型进行判断
-d 文件 判断该文件是否存在,并且是否为目录文件(是目录为真)
-e 文件 判断该文件是否存在(存在为真)
-f 文件 判断该文件是否存在,并且是否为普通文件(是普通文件为真)
语法:
test [选项] 文件名
[ 选项 文件名 ] 中括号两头必须有空格
按照文件权限进行判断
-r 文件 判断该文件是否存在,并且该文件是否拥有读权限(有读权限为真)
-w 文件 判断该文件是否存在,并且该文件是否拥有写权限(有写权限为真)
-x 文件 判断该文件是否存在,并且该文件是否拥有执行权限(有执行权限为真)
两个文件之间进行比较
文件1 -nt 文件2 判断文件1的修改时间是否比文件1的新(如果新则为真)
文件1 -ot 文件2 判断文件1的修改时间是否比文件1的旧(如果旧则为真)
文件1 -ef 文件2 判断文件1是否和文件2的inode号一致,可以理解为两个文件是为同一个文件,判断硬链接
两个整数之间的比较
整数1 -eq 整数2 判断整数1和整数2是否相等(相等为真)
整数1 -ne 整数2 判断整数1和整数2是否不相等(不相等为真)
整数1 -gt 整数2 判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2 判断整数1是否小于整数2(小于为真)
整数1 -ge 整数2 判断整数1是否大于等于整数2(大于等于为真)
整数1 -le 整数2 判断整数1是否小于等于整数2(小于等于为真)
字符串的判断
-z 字符串 判断字符串是否为空(为空返回真)
-n 字符串 判断字符串是否为非空(非空返回真)
字符串1==字符串2 判断字符串1和字符串2是否相等(相等返回真)
字符串1!=字符串2 判断字符串1和字符串2是否不相等(不相等返回真)
多重条件判断
判断1 -a 判断2 逻辑与,判断1和判断2都成立,最后的结果才为真
判断1 -o 判断2 逻辑或,判断1和判断2有一个成立,最后的结果就为真
!判断 逻辑非,是原来的判断取反
单分支if条件语句
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
多分支if条件语句
if [ 条件判断式1 ]
then
成立时执行
elif [ 条件判断式2 ]
then
成立时执行
…
else
当所有条件不成立时,执行次程序
fi
case语句
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序
;;
“值2”)
如果变量的值等于值2,则执行程序
;;
…省略
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
语法1:
for 变量 in 值1 值2 值3…
do
程序
done
语法2:
for(( 初始值;循环控制条件;变量变化 ))
do
程序
done
while循环
while [ 条件判断式 ]
do
程序
done
until循环
until [条件判断式]
do
程序
done
和while循环相反,当条件判断式不成立时执行程序