Shell练习
Shell
脚本格式:以!#/bin/bash开头(指定解析器)
执行:sh/bash 相对路径或者绝对路径的.sh文件 也可以./ 但是需要设置文件执行权限
追加内容到某个文件 : echo 内容 >> 文件名
shell中的变量:
系统变量:
$HOME:home目录
$PWD:当前目录
$SHELL:shell目录
$USER:当前用户
自定义变量:
声明:变量=值
使用变量:$变量
撤销变量:unset 变量名
声明静态变量法:readonly 变量
静态变量不能unset
变量提升为全局变量 需要:export 变量(控制台执行)
特殊变量:
$n:n为数字,$0表示该脚本名称,$1-$9位第1个到第9个参数占位符,10个以上的参数,需要用大括号表示 ${10};
$#:获取所有输入参数的个数,常用于循环;
$*:这个变量代表命令行中所有的参数,$*把所有参数看成一个整体
$@:这个变量也代表命令行中所有的参数,$*把每个参数看成区分对待
$?:表示最后一次执行命令的返回状态;如果这个变量值为 0,证明上一个命令执行正确,否则为错误
运算符:
1)$((表达式))或者$[表达式]
2)expr +, -, \*, /, % 加 减 乘 除 取余
注意:expr 运算符间要有空格
计算 (1+1)*5 ====> expr `expr 1 + 1` \* 5 或者 $[(2+3)*4]
条件判断:
[ condition ] 注意 condition 前后必须有空格;条件非空即为true
常用条件判断:
1)两个整数之间的比较
= 字符串比较
-lt 小于
-gt 大于
-eq 等于
-le 小于等于
-ge 大于等于
-ne 不等于
2)按文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并是一个目录
4)多条件判断:
&&:表示前一条命令执行成功后才执行下一条
||:表示上一条命令执行失败后,才执行下一条
流程控制:
1)if语句
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif
程序
fi
注意:条件判断式左右必须有空格; if后面也要有空格!!!
2)case语句
case $变量名 in
”值1”)
如果变量值等于1,则执行程序1
;;(相当于break)
”值2”)
如果变量值等于2,则执行程序2
;;
…省略其他分支…
*)(相当于default)
如果变量都不是以上值,则执行此处;
;;
esac(整个循环结束)
3)for循环
i:
for((初始值;循环控制条件;变量变化))
do
程序
done
i::
for 变量 值1 值2 值3…
do
程序
done
4)while
While [条件判断表达式]
do
程序
done
函数:
1)basename:会截取,留下文件的文件名
2)dirname :会截取,返回文件的相对路径(目录部分,不包含文件名)
自定义函数:
[function] funname[()]
{
Action
[return int]
}
注意:
必须在调用函数的地方先声明函数
函数的返回值只能通过系统变量$?获得
shell常用工具:
cut:
cut [选项参数] 文件名称
参数:
-f 列号,取出第几列
-d 分隔符 ,按照指定分隔符分割列
sed:
sed 是一种流编辑器,处理时,把当前处理的行,存储在缓存中,称为‘模式空间’,接着用sed处理缓冲区中的内容,处理完成后
把缓冲区中的内容送往屏幕。紧接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你用重定向存储输出;
sed[选项参数] ‘command’ filename
选项参数:
-e 直接在指令列模式下使用sed 的动作编辑
命令command
a 新增,a的后面可接字符串,在 下一行出现
d 删除
s 查找并替换
awk:
一个强大的文本分析工具,把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
awk [选项参数] ‘pattern1{action1} pattern2{action2} pattern3{action3}…’ filename
pattern:表示awk在数据中查找的内容,就是匹配模式
Action:在找到匹配内容时的一系列命令
选项参数:
-F 指定输入文件分隔符
-v 赋值一个用户定义变量
sort: 将文件进行排序,并将排序结果标准输出
sort(选项)(参数)
选项参数:
-n 按照数值的大小排序
-r 以相反的顺序排序
-t 设置排序时所用的分隔符
-k 指定需要排序的列
参数:
指定待排序的文件列表