一、shell
用户和内核之间的一座桥梁即代理,接收用户的操作,代码指令来反馈给内核,让内核来响应。
二、解析器种类
1、解析器查看命令: cat /etc/shells
重要的是sh和bash。
2、Bash和sh的关系:
使用sh调用执行脚本,相当于打开了bash的POSIX标准模式 (等效于bash的 --posix 参数)。一般来讲,sh是bash的“子集”。其实sh调用的就是bash。
3、Centos默认的解析器是bash
查看命令:echo $SHELL
4、脚本格式
脚本格式:通常以#!/bin/bash开头(指定解析器)
5、脚本执行方式
1)、采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
如:sh helloworld.sh 或 sh /root/aa/helloworld.sh;bash helloworld.sh 或 bash /root/aa/helloworld.sh
2)、采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
(a)首先要赋予helloworld.sh 脚本的+x权限
命令:chmod 777 helloworld.sh 或chmod +x helloworld.sh
(b)执行脚本相对路径 ./helloworld.sh 和 绝对路径/root/aa/helloworld.sh
第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限
6、shell交互界面: who
登入帐号 (root),使用的终端机 (tty1),登入时间
计算用户个数一个
三、变量
1、系统变量
使用:echo加系统变量,如 echo $HOME
1)、$HOME: 家目录
2)、$PWD:路劲
3)、$SHELL:解析器
4)、$USER:用户名
2、自定义变量
1)、基本语法
a)定义变量:变量=值
b)撤销变量:unset 变量
c)声明静态变量:readonly变量,注意:不能unset
2)、变量定义规则
a)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
b)等号两侧不能有空格
c)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
d)变量的值如果有空格,需要使用双引号或单引号括起来
3)、案例实操
a)定义变量a
b)给变量a重新赋值
c)unset撤销变量a,撤销后为空
d)声明静态的变量a=2,不能unset
e)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
f)变量的值如果有空格,需要使用双引号或单引号括起来
g)可把变量提升为全局环境变量,可供其他shell程序使用。Export变量名。
3、特殊变量
1)$n
a)基本语法:$n (功能描述:n为数字,$0代表该脚本名称,$1-9代表第一到第九个参数,十以上参数使用{}包含例:{10}
b)输出该脚本文件名称。输入参数1和输入参数2的值
2)$#
a)基本语法:$# (功能描述:获取所有输入参数个数,常用于循环)。
b)获取输入参数个数
3)$*和$@
a)基本语法:
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
b)案例:打印输入的所有参数
4)$?
a)基本语法:$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
b)案例:判断脚本是否正确执行
四、运算符
格式为: ‘expr空格n空格 (+、-、\*、/、%) 空格n’
两个数相加(注意使用的是反引号 ` 而不是单引号 '):
1、加
1)expr 2 + 2
2、减
1)expr 4 - 2
3、乘
1)expr 4 \* 2
4、除
1)expr 4 / 2
5、余
1)expr 4 % 2
五、流程控制
1、if
a)if[ $a == $b ] then echo "a 等于b" fi
输出 :
a小于b
b)if else 语句经常与 test 命令结合使用
2、for
3、while
b)read读取键盘信息
c)无限循环
4、untile循环
until 循环执行一系列命令直至条件为 true 时停止。
5、case ..... esac
case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束, 跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
6、break命令
break命令允许跳出所有循环(终止执行后面的所有循环)。
下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。
7、continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
6、Read读取控制台输入
7、函数
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n
带return
函数返回值在调用该函数后通过 $? 来获得。
函数参数
Shell工具
1、Grep
2、Cut
3、Sort
4、Unlq
5、Tee
6、Diff
7、Paste
8、Tr
9、Sed
10、Awk