Shell

  • Shell脚本是什么
  • Shell变量
  • Shell传递参数
  • Shell数组
  • if判断
  • 循环
  • for循环
  • while循环
  • 分割
  • awk
  • sed 替换


Shell脚本是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至编写一些程序。Shell介于Linux内核与外部程序之间,相当于一个联系者的角色。
Linux下的Shell脚本文件,就是将各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。
通常情况下,Shell脚本都是以 .sh 为后缀的文件,并且开头是

#!/bin/bash

这里/bin/bash表示shell脚本是以/bin/bash 解释器运行的。
通常情况下,有两种方式可以运行脚本文件:

  1. 假如使用sh命令执行脚本文件,可以没有+x权限和第一行解释器#!/bin/bash
  2. 假如不是使用sh命令,那么需要+x 且 #!/bin/bash

Shell变量

Shell 是一种弱类型语言,不需要提前定义数据类型:

注意!变量赋值的时候=号前后不能有空格

shell中执行mysqldump shell中执行sh文件_数组


这里K是静态变量,D是动态变量。

$指的是引用:

$KA 是以KA为整体

${K}A 加大括号的是规范的

动态变量写的时候并不知道那个值是什么,只是命令走到那一行的那一刹那,那个值是什么。

shell中执行mysqldump shell中执行sh文件_Shell_02

Shell传递参数

shell中执行mysqldump shell中执行sh文件_数组_03


这里 $1 $2 分别代表第一个参数,第二个参数;

$0表示命令本身;

$# 代表的是参数的个数;

shell中执行mysqldump shell中执行sh文件_shell中执行mysqldump_04$ 表示当前脚本运行的 PID**

无参数运行脚本:

shell中执行mysqldump shell中执行sh文件_脚本_05


两个参数运行脚本(以空格为分):

shell中执行mysqldump shell中执行sh文件_Shell_06


四个参数运行脚本:

shell中执行mysqldump shell中执行sh文件_shell中执行mysqldump_07

Shell数组

Shell只支持一维数组,并且以空格分隔,以小括号来表示。

shell中执行mysqldump shell中执行sh文件_数组_08


其中 @和*都表示全部,arr[4]表示数组下标为4的元素(数组以0开始)。 #arr[@]表示数组总共有多少个元素。

if判断

shell中执行mysqldump shell中执行sh文件_数组_09


其中注意点:

  1. if [ $A == $B ];then
    if 之后必须要有一个空格的,没有空格是会报错的;
    ==两边需要空格;
    [ 之后需要空格,]之前需要空格;
  2. 最后需要加上 fi 作为结束
    多层if 判断

循环

for循环

shell中执行mysqldump shell中执行sh文件_脚本_10


输出:

shell中执行mysqldump shell中执行sh文件_数组_11


shell中执行mysqldump shell中执行sh文件_脚本_12


注意:for(()) 必须得有双层括号

do done

while循环

shell中执行mysqldump shell中执行sh文件_数组_13

分割

shell中执行mysqldump shell中执行sh文件_shell中执行mysqldump_14

OLD_IFS="$IFS"
IFS=","   //分隔符为,
arr=($S) //将S字符串分隔成数组
IFS="OLD_IFS"

这四行是约定俗成的

awk

awk就是把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

打印第x列

shell中执行mysqldump shell中执行sh文件_脚本_15


shell中执行mysqldump shell中执行sh文件_脚本_16


打印第X行

shell中执行mysqldump shell中执行sh文件_shell中执行mysqldump_17


如果文本中的分隔符不是空格,而是例如“,”之类的,需要:

shell中执行mysqldump shell中执行sh文件_Shell_18


可以将读取某行,读取某列一起操作:

shell中执行mysqldump shell中执行sh文件_shell_19


也可以直接使用awk来读取

shell中执行mysqldump shell中执行sh文件_shell中执行mysqldump_20

sed 替换

shell中执行mysqldump shell中执行sh文件_脚本_21


shell中执行mysqldump shell中执行sh文件_脚本_22


全局替换:

shell中执行mysqldump shell中执行sh文件_脚本_23


在每行前面添加:

shell中执行mysqldump shell中执行sh文件_shell_24


在每行行尾添加:

shell中执行mysqldump shell中执行sh文件_shell中执行mysqldump_25