一、shell概述
(1)Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
二、shell解析器
1、查看系统的默认的shell解析器
sudo cat / etc/ shells
=====================
/ bin/ sh
/ bin/ bash
/ sbin/ nologin
/ usr/ bin/ sh
/ usr/ bin/ bash
/ usr/ sbin/ nologin
三、shell脚本入门
1、脚本格式
(1)脚本以#!/bin/bash开头(指定解析器)
2、脚本的常用执行方式
(1)采用bash或sh+脚本的相对路经或绝对路径(不用赋予脚本可执行的权限)
(2)采用脚本的相对路经或绝对路径执行脚本(脚本必须有可执行权限)
四、shell中的变量
1、系统变量
(1)常用系统变量
$HOME ---当前用户的家目录
$PWD ---当前用户所在的绝对路径
$SHELL ---系统的默认的shell解析器
$USER ---当前使用系统的用户
2、特殊变量
(1)$n
基本语法:$n
功能描述:n为数字,$0代表该脚本名称,$1---$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${12}
(2)$#
基本语法:$#
功能描述:获取所有输入参数个数,常用于循环
(3)$*
基本语法:$*
功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
(4)$@
基本语法:$@
功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
(5)$?
基本语法:$?
功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;
如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了
3、自定义变量
(1)基本语法
定义变量:变量名=值(=左右不能有空格) eg:A=1
撤销变量:unset 变量
声明静态变量:readonly 变量名=值(不可以被撤销)
把变量提升为全局变量:export 变量名
(2)变量定义规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
变量的值如果有空格,需要使用双引号或单引号括起来。
五、运算符
(1)基本语法
$((运算式)) 或 $[运算式]
expr + ,- , \* ,/ ,% 加,减,乘,除,取余(expr运算符之间要有空格)
eg1:计算9- 2
expr 9 - 2
expr: 语法错误
expr 9 - 2
7
eg2:计算(2+ 3)* 4
expr `expr 2 + 3` \* 4
20
s=$[ ( 2+ 3) * 4]
echo $s
六、条件判断
(1)基本语法
[ condition ] (condition前后有空格)
注意:条件非空即为true,[ jingbu ]返回true,[]返回false
(2)常用判断条件
两个整数之间比较
=字符串比较
-eq等于(equal)
-ne不等于(Not equal)
-lt小于(less than) -le 小于等于(less equal)
-gt大于( greater than) -ge大于等于( greater equal)
按照文件权限进行判断
-r有读的权限(read)
-w有写的权限( write)
-x有执行的权限( execute)
按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在( existence)
-d文件存在并是一个目录(directory)
七、流程控制
1、if判断
(1)基本语法
if [ 条件表达式 ] ;then
程序主体
fi
或
if [ 条件表达式 ]
then
程序主体
fi
注意:
[条件判断式],中括号和条件判断式之间必须有空格
if后要有空格
2、case语句
(1)基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
3、for循环
(1)基本语法
for(( 初始值;循环控制条件;变量变化))
do
程序主体
done
八、read读取控制台输入
(1)、基本语法
read (选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)
参数:
变量:指定读取值的变量名
九、shell工具
1、cut
(1)基本语法
cut [参数] [文件名]
(2)使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
必须指定 -b、-c 或 -f 标志之一。
(3)参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除
2、sed
(0)说明
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
(1)基本语法
sed [选项] 'command' 文件名
(2)选项
-e --- 直接在指令模式上进行sed的动作编辑
-n --- 仅显示处理后的结果
(3)命令功能描述
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,后面不需要接东西
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
3、awk
(0)说明
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,
切开的部分再进行分析处理。
(1)基本语法
awk [选项参数]‘pattern1 {action1}pattern2 {action2}...' filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
参数
-F --- 指定输入文件折分隔符.
-v --- 赋值一个用户定义变量
4、sort
(1)说明
将文件进行排序,并将排序结果标准输出
(2)基本语法
sort 【选项] 文件名
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列