Shell脚本入门全套教程
1、> 输出正确的输出 -覆盖
2> 输出错误的输出 -覆盖
&> 输出正常和错误的信息 -覆盖
>> 追加
grep 过滤数据
clear 清频幕
vim --打开并编辑文本
shell脚本三大要素:
1、#! – 需要解析器
2、#-- 需要注释,标注思路、作用等信息
3、可执行语句
pstree –查看子进程的树型结构
环境变量-$Home $PATH
位置变量
预定义变量 比如$?—上个命令执行结果(0正确、非0错误)、$0—文件名称、$#--位置变量的个数、$*--位置变量的值
············
read -s -t -p “请输入用户名:” username --界面输入参数
-s 不显示在终端界面
-t 指定在多少秒内输入参数值(-t 3)
useradd $name
“$pass” | passwd –-stdin “$name” –默认把pass赋值给name用户(修改密码)
export 定义全局变量(比如:export xx=11)
$[] 或 $(()) 表达式来运行加减乘除、取模的 $[1+8] –不支持小数运算
let 也可以进行常规的加减乘除,但是不会默认输出结果,要用echo输出才行–不支持小数运算
bc (scale=n-小数点位数)—需要安装软件—拿来进行小数运算
字符串比较:
[ -z $x] [ a == b] [ a != b];
整数值比较:
-eq(equal) 等于;
-ne (not equal)不等于;
-ge (Greater or Equal) 大于或等于;
-le (less or Equal)小于或等于;
-gt (Greater Than) 大于;
-lt (Less than)小于
who -看谁在登录
对文件状态做判断:
-e(Exist): 判断对象是否存在, 若存在则结果为真;
-d(Directory), 判断对象是否为目录,是则为真;
-f (file):判断对象是否为一般文件,是则为真;
-r (Read): 象是否有可读权限,是则为真;
-w (write): 判断对象是否有可写权限,是则为真
-x(eXcute):判断对象是否有可执行权限, 是则为真;
组合多个命令的控制符:
;按顺序执行
&& a &&b a为真,才执行b命令;
|| a || b a为真,则不执行b命令,a为假,则执行b
tr -s 删除多余重复的字符: tr -s “” #删除多余的空格;
cut 过滤某一列数据 cut -d: -f1 /etc/passwd #以冒号为分隔,过滤第一列
-d:分隔符;f1: 第一列;f2:第二列
grep 过滤某一行数据;
df 分区
time:时间;local_ip:eth0网卡ip; free_mem: 剩余内存大小,free_disk:剩余磁盘大小
cpu_load:15min平均负载;login_user:登录系统的用户;procs:当前进程数量
if 条件测试 if 条件测试;then 命令序列 fi
then 命令序列
elif
命令序列2
else
命令序列 3
fi
ping -c2 -i0.1 192.168.1.63
-c2 ping两次就结束
-i0.1 ping的间隔时间
-w1 等待1秒钟
for 变量 in 值列表({1..10}或{a..z}) 或者 for i in $(cat list.txt)
do
命令序列
done
for ((初值;条件; 步长))
do
命令序列
Done
while [条件测试]
do
命令序列
Done
function 函数名{
}
函数名(){
}
sed:(Stream Editor)流式编辑器,文件随行处理-增删改查
sed [选项] ‘[定位符]指令’ 文件名 send -n ‘1,3p’ /etc/passwd 从1行到3行打印 -n默认不打印全文信息 p-print
命令 | sed [选项] ‘[定位符]指令’
常用命令选项:
-n:屏蔽默认输出
-i: 直接修改源文件
-r:支持扩展正则
‘1.3p’ 第一行到第三行,
p(print):打印行
d (delete): 删除行 1d
c (replace): 替换行 c/
s (substitution): 替换关键词 s/2046/XXXX s/2046/XXXX/g -全部替换 s/2046/XXXX/2 第个2046替换 替换符/可以用其他字符替换(比如#,!等)
=:打印行号 sed -n ‘1=’ /etc/passwd $=最后一行
Sed多行文本处理的常用指令:
I (insert): 插入 sed ‘2i ABC_XYZ’ test.txt -第二行前面插入ABC_XYZ
a(append): 追加 -在下面追加内容
r(red): 读取文件|导入文件内容 sed ‘2r /etc/hosts’ test.txt 读取hosts文件的内容追加到test.txt后面
w(write): 文件另存为| 导出文件内容
基本正则符号
正则符号 |
描述 |
abc |
匹配abc |
^ |
匹配开头 |
$ |
匹配结尾 |
[集合] |
匹配集合中的任意单个字符 |
[^集合] |
对集合取反 |
. |
匹配任意单个字符 |
* |
匹配前一个字符任意次(包含0次) |
.* |
匹配任意 |
\{n,m\} |
匹配前一个字符n到m次 |
\{n,\} |
匹配前一个字符至少n次 |
\{n\} |
匹配前一个字符n次 |
扩展正则符号 -E
正则符号 |
描述 |
+ |
匹配前面的字符至少一次 |
? |
匹配前面的字符0或1次 |
() |
组合与保留 |
| |
或者 |
{n,m} |
匹配前面的字符n到m次 |
{n,} |
匹配前面的字符至少n次 |
{n} |
匹配前面的字符n次 |
Perl兼容的正则符号 -P
正则符号 |
描述 |
\b |
匹配单词边界,判断前后不能有其他东西 |
\w |
匹配字符数字下划线 |
\W |
和\w相反 |
\s |
匹配空白 |
\d |
匹配数字 |
\d+ |
匹配多个数字 |
\D |
匹配非数字 |
Grep语法格式:
grep [选项] 匹配模式 [文件]…
常用的选项:
-i : 忽略大小写
-v: 取反匹配
-w: 匹配单词
-q: 静默匹配,不将结果显示在屏幕上
Awk语法格式:
格式1:前置条件 | awk [选项] ‘[条件]{指令}‘
格式2:awk [选项] ‘[条件]{指令}‘ 文件
-F 可以指定分隔符(一般默认为空格或Tab键)
case 变量 in
模式1)
命令序列;;
模式2)
命令序列;;
*)
默认命令序列;;
esac