Shell脚本笔记

脚本格式

  • #!/bin/bash 开头的.sh的文件
  • 执行方式:
  1. sh /bash 文件名
  2. chmod +x 文件名chmod 777 文件名 修改执行权限后,通过 ./文件名 方式执行

变量

系统变量

$PWD $SHELL

自定义变量

创建方式 变量名=变量值 =前后不能有空格
使用时 $变量名
撤销 unset 变量名

特殊变量

  • $n: 第n个参数,从1开始
  • $#: 参数个数
  • $*: 所有参数 ,"$*"把参数看作一个整体
  • $@: 所有参数, "$@"把参数区分看待
  • $?: 最近一次命令是否正确执行,正确为0,不正确为其他。

运算符

  • $((运算式)) 或 $[运算式]
  • 条件判断:
    语法 [ condition ] []前后有空格
    判断条件:
    -eq -ne -lt -le -gt -ge
    -r -w -x
    -e -f -d

流程控制

if 判断

语法:

if [ condition ];then
    程序
fi

或者

if [ condition ]
then
    程序
fi

多分支

if [ condition ] 
then
    程序
elif [ condition ]
then
    程序
else 
   程序
fi

case

语法:

case $变量名 in 
”值1“)
      程序
;;
”值2“)
      程序
;;
*)
      程序
 esac

for 循环

语法

for((初始值;循环控制条件;变量变换))
do
   程序
done

或者

for i in 值1 值2 值3 
do
   程序
done

或者

for i in {0..n} 
do
   程序
done

while 循环

语法:

while [ condition ]
do 
	程序
done

read

语法: read (选项) (参数)
选项:
-p 提示符
-t 等待时间
参数:指定读取值的变量

read -p ”Input:“ -t 5 n

函数

basename

提取最后一个/后的字符

basename [string / pathname] [suffix]

dirname

提取文件路径

自定义函数

语法

[function] funname[0]
{
	action
	[return int;]
}

正则表达式

  • ^
  • $
  • .
  • *
  • []
  • \

文本处理

cut

语法

cut [选项参数] filename

选项参数:
-f : 列号,提取第几列
-d: 分割符,默认\t
-c: 按字符进行切割后加n 表示取第几列比如-c 1

例:选取系统PATH 变量值,第2 个“:”开始后的所有路径:

echo $PATH | cut -d ":" -f 3-

grep

全面搜索正则表达式并把行打印
语法:

 grep [选项参数] [--color=auto] '搜寻字符串' filename

选项参数:

  • -a :将 binary 文件以 text 文件的方式搜寻数据
  • -c :计算找到 ‘搜寻字符串’ 的次数
  • -i :忽略大小写的不同,所以大小写视为相同
  • -n :顺便输出行号
  • -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
  • –color=auto :可以将找到的关键词部分加上颜色的显示

awk

语法

awk [选项参数] '/pattern1/{action1} /pattern2/{action2} ' filename

选项参数:
-F: 指定输入文件分隔符
-v: 赋值一个用户定义变量

pattern:表示awk 在数据中查找的内容,就是匹配模式(可以支持正则表达式) ,可以省略
action:在找到匹配内容时所执行的一系列命令
常用 print

例:以root 关键字开头的所有行,并输出该行的第1 列和第7 列,中间以“,”号分割。

awk -F : '/^root/{print $1","$7}' passwd

例:只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名user,
shell 在最后一行添加"dahaige,/bin/zuishuai"。

awk -F : 'BEGIN{print "user, shell"} {print $1","$7}
END{print "dahaige,/bin/zuishuai"}' passwd
  • BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

  • 表示包含,!表示不包含

  • 比较符号:== != <= >= < >

  • 逻辑运算 &&(表示且) || (表示或)

  • awk的if语句也分为单分支、双分支和多分支
    单分支为if(){}
    双分支为if(){}else{}
    多分支为if(){}else if(){}else{}

  • awk 也可用于for,while,数组

内置变量
FILENAME:文件名
NR : 记录数
NF:列数

sed

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行
语法:

sed [选项参数] 'action' 参数

选项参数:
-n :打印
-r: 拓展正则表达 ,正则表达式以“/”包围
action:

  • a:增加,在当前行下面增加一行指定内容
  • c:替换,将选定行替换为指定内容
  • d:删除,删除选定的行
  • i:插入,在选定行上面插入一行指定内容
  • p:打印
  • s:替换,替换指定字符
  • y:字符转换
    例:
    从第 4 行至第一个包含 the 的行
sed -n ‘4,/the/p’ txt

wc

可以统计出文件的行数、单词数、字符数

wc file

显示出文件的行数、单词数、字符数

wc -l file

只统计行数

wc -w file

只统计单词数

wc -c file

只统计字符数

wc -F file

打印文件最长一行的长度

其他

sort

语法:

sort  (选项)  filename

选项:

  • -t: 指定排序时所用的分隔字符
  • -n: 依照数值的大小排序
  • -r: 以相反的顺序来排序
  • -k: 指定需要排序的列

uniq

语法:

uniq (选项) (参数)

选项:

  • -c :显示重复出现的次数
  • –d:仅显示重复出现的行列(去重)
  • –u:仅显示出一次的行列

参考链接:
https://blog.csdn.net/tjcwt2011/article/details/120198128
https://blog.csdn.net/WuDan_1112/article/details/124582776
https://blog.csdn.net/sinat_34241861/article/details/122027229

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值