Shell基本语法
指向解释器 #!/bin/bash (可用其他解释器,不写时默认调用bash)
打印 echo”输出内容”
定义变量 例 i=0
调用变量 例 echo $i
运算 例 echo $[$a+$b] (推荐)
echo $(($a+$b))
expr $a + $b
条件 例 [ $a = $b ] (条件非空为true,空为false,例 [ asd ] 为true)
常用判断条件
(1)整数间比较
= 字符串比较
-lt 小于(less than)
-le 小于等于 (less equal)
-eq 等于 (equal)
-gt 大于(greater than)
-ge 大于等于 (greater equal)
-ne 不等于 (not equal)
(2)文件权限判断
-r 有读权限 (read)
-w 有写权限 (write)
-x 有执行权限 (execute)
(3)文件类型判断
-f 文件存在且为常规文件(file)
-e 文件存在(existence)
-d 文件存在且为目录(directory)
预定义变量:
$HOME 家目录
$PWD 当前目录
$USER 当前用户
$SHELL 当前解释器
系统变量
$n (n为1-9,10以上用${n})
$# 变量个数
例 $1 = args[0]
$# = args.length
$* 所有参数(看作整体)
$@ 所有参数(单独区分)
$? 状态码(0为正常运行)
readonly 设置变量只读,不可改变
unset 撤销变量(不可撤销readonly变量)
if判断
基本语法:
if[ 判断判断式 ],then
程序
fi
或
if[ 判断判断式 ]
then
程序
elif[ 判断判断式 ]
then
程序
else
程序
fi
case语句
基本语法:
case $变量名 in
“值1”)
如果变量值等于值1,执行程序1
;;
“值2”)
如果变量值等于值2,执行程序2
;;
……省略
*)
如果变量值不为以上值,执行此程序
;;
esac
for循环
基本语法:
for((初始值;循环控制条件;变量变化 ))
do
程序
done
基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
while循环
基本语法:
while[ 条件判断式 ]
do
程序
done
read读取控制台输入
基本语法
read(选项)(参数)
选项:
-p 指定读取值时的提示符
-t 指定读取值时的等待时间
函数
基本语法:
function functionname() (可省略function或括号的其中一个,不可同时省略)
{
函数内容;
}
函数的参数调用
例:
function plus()
{
echo$[$1+$2]
}
plus 1 2
Shell工具:
1.cut
cut命令从文件的每一行剪切字节、字符、字段并输出
基本用法:
cut[选项参数] filename
参数:
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
-c 指定具体的字符(第几个字符)
2.sed
流处理编辑器,逐行处理输出,本身不会改变文件内容,除非使用重定向存储输出
基本用法:
sed[参数选项] ‘command’ filename
参数:
-e 直接在指令列模式上进行sed的动作编辑
-i 直接编辑文件
命令:(命令前接行号,可通过逗号划分多行,也可使用正则表达式)
a 新增,在a后面可接字串没在下一行出现
d 删除
s 查找并替换(使用正则表达式划分 例sed ‘3s/原内容/替换内容/g’ g表示全局替换)
正则规则:
\ 转义
^ 一行的开头
^R表示以R开头的行
$ 一行的结束
R$表示以R结尾的行
* 表示上一个子式匹配0次或多次,贪心匹配
Zo*
Z
Zo
Zooo
. 匹配一个任意字符
.*匹配任意字符串
[] 表示匹配某个范围内的字符
[a-z] 匹配一个a-z之间的字符
[a-z]* 匹配任意字母字符串
(使用正则表达式需要用斜杠括起来)
3.awk
文本分析工具,把文本逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
基本用法
awk[选项参数] ‘pattem1{action1} pattem2{action2}…’ filename
pattem:表示AWK在数据中查找的内容(匹配模式)
action:在找到匹配内容时所执行的一系列命令
参数:
-F 指定输入文件拆分隔符
-v 赋值一个用户定义变量
BEGIN 数据到来之前先执行
END 数据处理完毕后执行
例:’BEGIN{print “BEGIN”}END{print”END”}’
内置变量:
FILENAME 文件名
NR 已读记录数
NF 浏览记录的域的个数(切割后,列的个数)
4.sort
将文件进行排序,并将结果标准输出
基本语法:
sort(选项)(参数)
参数
-n 依照数值大小排序
-r 以相反顺序排序
-t 设置排序时所用分隔字符
-k 设定需要排序的列