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

posted @ 2022-11-08 17:45  划边逅  阅读(578)  评论(0编辑  收藏  举报