Shell基本语法

Shell基本语法

九月 11, 2020

指向解释器 #!/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 设定需要排序的列