Shell编程

时间:2022-11-05 18:54:45

1、Shell概述

Shell编程

1.1 Linux提供的Shell解释器都有哪些

[root@hadoop100 ~]# cat /etc/shells

/bin/sh

/bin/bash

/usr/bin/sh

/usr/bin/bash

/bin/tcsh

/bin/csh

1.2 bash和sh的关系

[root@hadoop100 ~]# ls -l ../bin/ | grep bash

-rwxr-xr-x. 1 root root      964536 4月   1 2020 bash

lrwxrwxrwx. 1 root root          10 7月  20 00:02 bashbug -> bashbug-64

-rwxr-xr-x. 1 root root        6964 4月   1 2020 bashbug-64

lrwxrwxrwx. 1 root root           4 7月  20 00:02 sh -> bash

1.3Centos默认的解释器是bash

[root@hadoop100 ~]# echo $SHELL

/bin/bash

1.4 脚本的常用执行方式

    第一种:采用bash或sh+脚本的相对路径或者绝对路径(不需要赋于脚本+x权限)

        sh+脚本的相对路径

        sh+脚本的绝对路径

        bash+脚本的相对路径

        bash+脚本的绝对路径

    第二种:采用输入脚本的绝对路径或者相对路径执行脚本(必须具有可执行权限+x

        1、首先要赋予脚本+x权限

        2、执行脚本

        相对路径

        绝对路径

    注意:第一种执行方式,本质上是bash解释器帮你执行脚本,所以脚本本事不需要执行权限

              第二种执行方式,本质上是脚本需要自己执行,所以需要执行权限

    第三种:再脚本的路径前加上“.”或者source

        使用“.”或者source执行脚本,是在当前的bash指令下执行,而使用sh或者bash都是相当于在子bash下执行脚本

   开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置当前变量,父shell是不可见的。

2 变量(环境变量)

 2.1 系统预定义变量   

    a、常用系统变量

$HOME $PWD $SHELL $USER等

    b、查看系统变量的值

echo $HOME

    c、显示当前Shell中所有的变量

evn | less

printenv | less

set | less  (查看所有的) 按ctrl+D翻页查看 

 2.2自定义变量

Shell编程

      (5)把变量提升为全局变量,可供其他Shell程序使用 可以使用 export 变量名  

2.3特殊变量

    1)、$n 

    基本语法

            $n (功能描述 : n为数字,$0代表脚本名称,$1-$9代表第一到第九个参数,十以上的参数,需要使用

        大括号包含,例如 ${10})

Shell编程

    2)、$#

    基本语法

            $# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)

Shell编程

    3、$*、$@

        基本语法

                $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

                $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

Shell编程

    4、$?

        基本语法

                $? (功能描述:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果

         这个变量的值为非0(具体是哪个数字,由命令自己来定),则证明上一个命令执行不正确)

3 运算符

      基本语法

            "$((运算表达式))"或者"$[运算表达式]"(在最开始的时候是使用expr 加参数的形式进行运算)

Shell编程

Shell编程

4 条件判断

Shell编程

Shell编程

        (4)多条件判断(&& 表示前一条命令成功时,才执行后一条命令,|| 表示上一条命令执行失败后

        才执行下一条命令)类似与java中的三目运算符,如果放在一个中括号中,需要使用-a

Shell编程

5 流程控制(重点)

5.1 if判断

  基本语法

(1)单分支

if [ 条件判断式 ];then

    程序

fi

或者

if [ 条件判断式 ]

then

    程序

fi

Shell编程

    

(2)多分支

if [ 条件判断式 ]

then

    程序

elif [ 条件判断式 ]

then

    程序

else

    程序

fi

Shell编程

  5.2 case语句

Shell编程

Shell编程

5.3 for循环

        基本语法1

for (( 初始值;循环控制条件;变量变化))

do

    程序代码

done

 

Shell编程

  

基本语法2

for 变量 in 值1 值2 值3...

do

    程序代码

done

Shell编程

5.4 while循环    

while [ 条件判断式 ]

do

    程序代码

done

Shell编程


6 read读取控制台输入

Shell编程

Shell编程

7 函数

7.1 系统函数

    7.1.1 basename

Shell编程

   7.1.2 dirname

Shell编程

Shell编程


8 自定义函数

Shell编程

Shell编程

Shell编程


9 正则表达

        正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串,在很多文本编辑器中,正则表达式通常被用来检索、替换那些符合某个模式的文本,在Linux 中,grep,sed,awk等文本处理工具都支持通过正则表达式进行模式匹配。

9.1 常规匹配

        一串不包含特殊字符的正则表达式匹配它自己

cat /etc/passwd | grep gavin


9.2 常用特殊字符   

  1.    特殊字符: ^ 匹配一行的开头
  2.    特殊字符:$  匹配一行的结束
  3.    特殊字符: ^$ 匹配空行 配合 grep -n 使用
  4.    特殊字符: . 匹配一个任意的字符
  5.    特殊字符: * 不单独使用,它和.字符连用,表示匹配上一个字符0次或者多次
  6.    特殊字符: .* 匹配任意字符串
  7.    字符区间:中括号是英文模式   

Shell编程

 10 文本处理工具           

  10.1 cut

Shell编程

10.2 awk

    一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理

Shell编程

    注意: BEGIN在所有数据读取之前执行,END在所有数据执行之后执行

Shell编程

Shell编程