目录
1.Shell基础知识
2.判断和循环语句
3.函数与中断、字符串的处理
4.正则表达式、SED文本编辑器
5.AWK数据过滤与数据分析
6.脚本综合案例
------------
1. Shell基础知识

1)常见shell解释器
/bin/bash
/bin/sh
/bin/csh
/bin/tcsh
2)通过usermod、chsh可以更改登陆Shell

3)标准输入与输出的重定向
> :标准输出,覆盖写入
>>:标准输出,追加写入
2>:错误输出,覆盖写入
2>>:错误输出,追加写入
&>:标准和错误一起纯输出,覆盖写入,和 > txt 2>&1 效果一样

4)source命令执行脚本文件,不会启动子进程,通过pstree查看进程树

5)环境变量
存储在/etc/profile或~/.bash_profile
命令env可以列出所有环境变量
常见环境变量:PATH、PWD、USER、UID、HOME、SHELL

6)位置变量
存储脚本执行时的参数
使用$n表示,n为数字序列号
$1、\(2、...、\){10}、${11}、...
eg:通过位置变量创建系统账户,配置密码
useradd "$1"
echo "$2" | passwd --stdin "$1"

7)预定义变量
变量名    含  义
$0    当前所在的进程或脚本名
$$    当前运行进程的PID号
$?    命令执行后的返回状态,0表示正常,1或其他值表示异常
$#    已加载的位置变量的个数
$*    所有位置变量的值

8)区分三种定界符
双引号 " ":允许扩展,以 $ 引用其他变量
单引号 ' ':禁用扩展,即便 $ 也视为普通字符
反引号 ` `:将命令的执行输出作为变量值,$()与反引号等效

9)read 从键盘读入变量值完成赋值
格式: read  [ -p "提示信息" ]  变量名
-p可选,-t 可指定超时秒数,-s设置是否在终端显示输入的内容
[root@localhost ~]# vim /root/shell/day01/read.sh 
#!/bin/bash
read -p "请输入用户名:"   name
read -p "请输入密码:" -s  pass
useradd "$name"
echo "$pass" | passwd --stdin "$name"
[root@localhost ~]# bash /root/shell/day01/read.sh 
请输入用户名:jerry
请输入密码:

10)变量作用域
局部变量
新定义的变量默认只在当前Shell环境中有效,无法在子Shell环境中使用
全局变量
全局变量在当前Shell及子Shell环境中均有效
[root@localhost ~]# x=11        #定义局部变量
[root@localhost ~]# sh                  #进入子Shell
sh-4.2# echo $x                            #无此变量,输出为空
sh-4.2# exit                #退出子Shell

[root@localhost ~]# export x=11    #定义全局变量

11)计算
$[]算式替换
使用 $[ ] 或 $(( )) 表达式
格式:$[整数1  运算符  整数2 .. ..]
计算结果替换表达式本身,可结合echo命令输出
Bash内建机制仅支持整数运算,不支持小数运算
[root@localhost ~]# echo $[3.5+2.2]
-bash: 3.5+2.2: 语法错误: 无效的算术运算符 (错误符号是 ".5+2.2")
我们可以通过计算器软件bc实现小数运算
如果没有该软件则需要使用yum安装
bc支持交互式和非交互式两种方式计算,scale=n可以约束小数位
bc计算器
scale=n可以约束小数位
quit退出交互式计算

12)echo回显
-n选项:不换行
-e选项:支持扩展属性
[root@localhost ~]# echo "hello world"             #换行
hello world
[root@localhost ~]# echo -n "hello world"         #不换行
hello world[root@localhost ~]# 
[root@localhost ~]# echo -e  "\033[31mOK\033[0m"   #红色显示OK
[root@localhost ~]# echo -e  "\033[32mOK\033[0m"   #绿色显示OK
[root@localhost ~]# echo -e  "\033[34mOK\033[0m"   #蓝色显示OK