首页 > 系统相关 >Shell编程

Shell编程

时间:2022-11-05 18:31:12浏览次数:44  
标签:脚本 bin Shell 变量 编程 执行 root bash

1、Shell概述

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编程_bash_02

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

2.3特殊变量

    1)、$n 

    基本语法

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

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

Shell编程_bash_03

    2)、$#

    基本语法

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

Shell编程_grep_04

    3、$*、$@

        基本语法

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

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

Shell编程_grep_05

    4、$?

        基本语法

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

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

3 运算符

      基本语法

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

Shell编程_grep_06

Shell编程_bash_07

4 条件判断

Shell编程_grep_08

Shell编程_bash_09

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

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

Shell编程_shell_10

5 流程控制(重点)

5.1 if判断

  基本语法

(1)单分支

if [ 条件判断式 ];then

    程序

fi

或者

if [ 条件判断式 ]

then

    程序

fi

Shell编程_bash_11

    

(2)多分支

if [ 条件判断式 ]

then

    程序

elif [ 条件判断式 ]

then

    程序

else

    程序

fi

Shell编程_shell_12

  5.2 case语句

Shell编程_grep_13

Shell编程_bash_14

5.3 for循环

        基本语法1

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

do

    程序代码

done

 

Shell编程_grep_15

  

基本语法2

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

do

    程序代码

done

Shell编程_bash_16

5.4 while循环    

while [ 条件判断式 ]

do

    程序代码

done

Shell编程_shell_17


6 read读取控制台输入

Shell编程_grep_18

Shell编程_shell_19

7 函数

7.1 系统函数

    7.1.1 basename

Shell编程_shell_20

   7.1.2 dirname

Shell编程_bash_21

Shell编程_shell_22


8 自定义函数

Shell编程_grep_23

Shell编程_$?_24

Shell编程_shell_25


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编程_grep_26

 10 文本处理工具           

  10.1 cut

Shell编程_bash_27

10.2 awk

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

Shell编程_shell_28

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

Shell编程_shell_29

Shell编程_grep_30



























标签:脚本,bin,Shell,变量,编程,执行,root,bash
From: https://blog.51cto.com/liqiangbk/5826071

相关文章

  • 以太坊智能合约编程之菜鸟教程
    基本概念了解这些名词是一个不错的开始:公钥加密系统。 Alice有一把公钥和一把私钥。她可以用她的私钥创建数字签名,而Bob可以用她的公钥来验证这个签名确实是用Alice的私......
  • 异步编程
    同步与异步同步:做完一件事才能做下一件事异步:可同时做好几件事,且互不影响一般程序都是从上往下的同步运行程序按顺序执行setTimeout就是个常用的异步方法程序不......
  • shell-函数学习笔记二
    shell函数的定义#方法一functionname{command...command}#方法二name(){command...command}函数的调用直接使用函数名调用,可以将函数......
  • 《Unix/Linux系统编程》第十二章学习笔记 20201209戴骏
    第十二章、块设备I/O和缓冲区管理知识点归纳一、块设备I/O缓冲区I/O缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk......
  • 基础JUC高并发编程-尚硅谷
    JUC高并发编程B站地址:【尚硅谷】大厂必备技术之JUC并发编程_哔哩哔哩_bilibili参考笔记1:(119条消息)【尚硅谷】大厂必备技术之JUC并发编程——笔记总结_浙桐的博客-CSD......
  • Jmeter中beanshell常用语法总结
    BeanShell前置处理器、BeanShell取样器、BeanShell后置处理器,它们之间的区别:1、BeanShell前置处理器、BeanShell后置处理器比BeanShell取样器多一个重置解释器(ResetInt......
  • xshell连接虚拟机
    xshell连接虚拟机 1.提前打开虚拟机,xshell才能连上 2.打开xshell,点击会话框或菜单栏的新建图标创建新连接  3.新建会话框左侧的类别,选择连接,输入相关信息 ......
  • 学习笔记-PowerShell 笔记
    PowerShell笔记什么是PowerShellWindowsPowerShell是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用.NETFramework的强大功能.WindowsPowerS......
  • Vue编程式路由导航、缓存路由组件、新的钩子函数
    1、编程式路由导航1.1作用不借助<router-link>实现路由跳转,让路由跳转更加灵活1.2具体编码//$router的两个APIthis.$router.push({ name:'xiangqing',......
  • 可编程渲染管线(Scriptable Render Pipeline, SRP)
    原文链接可编程渲染管线处理数据的流程可分为以下3大阶段1.应用阶段这个阶段大概会由CPU处理4件事情。首先会对模型数据进行可见性判断。模型数据由顶点位置、法线方......