Shell脚本是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序。Shell介于Linux内核与外部程序之间,相当于一个联系者的角色。
Linux下的Shell脚本文件,就是将各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。
通常情况下,Shell脚本都是以 .sh 为后缀的文件,并且开头是
#!/bin/bash
这里/bin/bash表示shell脚本是以/bin/bash 解释器运行的。
通常情况下,有两种方式可以运行脚本文件:
- 假如使用sh命令执行脚本文件,可以没有+x权限和第一行解释器#!/bin/bash
- 假如不是使用sh命令,那么需要+x 且 #!/bin/bash
Shell变量
Shell 是一种弱类型语言,不需要提前定义数据类型:
(注意!变量赋值的时候=号前后不能有空格)
这里K是静态变量,D是动态变量。
$指的是引用:
$KA 是以KA为整体
${K}A 加大括号的是规范的
动态变量写的时候并不知道那个值是什么,只是命令走到那一行的那一刹那,那个值是什么。
Shell传递参数
这里 $1 $2 分别代表第一个参数,第二个参数;
$0表示命令本身;
$# 代表的是参数的个数;
∗
代
表
全
部
参
数
∗
∗
*代表全部参数 **
∗代表全部参数∗∗$ 表示当前脚本运行的 PID**
无参数运行脚本:
两个参数运行脚本(以空格为分):
四个参数运行脚本:
Shell数组
Shell只支持一维数组,并且以空格分隔,以小括号来表示。
其中 @和*都表示全部,arr[4]表示数组下标为4的元素(数组以0开始)。 #arr[@]表示数组总共有多少个元素。
if判断
其中注意点:
- if [ $A == $B ];then
if 之后必须要有一个空格的,没有空格是会报错的;
==两边需要空格;
[ 之后需要空格,]之前需要空格; - 最后需要加上 fi 作为结束
多层if 判断
循环
for循环
输出:
注意:for(()) 必须得有双层括号
do done
while循环
分割
OLD_IFS="$IFS"
IFS="," //分隔符为,
arr=($S) //将S字符串分隔成数组
IFS="OLD_IFS"
这四行是约定俗成的
awk
awk就是把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
打印第x列
打印第X行
如果文本中的分隔符不是空格,而是例如“,”之类的,需要:
可以将读取某行,读取某列一起操作:
也可以直接使用awk来读取
sed 替换
全局替换:
在每行前面添加:
在每行行尾添加: