• Linux之Shell编程快速上手


    ✅作者简介:大家好我是爱康代码
    📃个人主页:链接: 点一下这里就进入爱康代码的主页链接,欢迎参观!!!
    🔥💖如果觉得博主的文章还不错的话,请👍三连支持一下博主哦🤞

    一、Shell编程基础

      在linux系统中,shell不仅能够执行命令(启动、挂起、停止甚至编写一些程序),还可以使用shell编程进行任务自动化,进行系统管理任务、系统任务调度等,是一门非常优秀的编程语言!

    1.1 Shell脚本程序

      Shell脚本程序是Shell命令语句的集合,保存在文本文档中,可直接使用文本处理器运行和编程(如Vim)。Shell由Shell环境解释执行,Shell脚本在Linux系统中不需要编译、链接、及生成可执行文件,可直接由相应解释器解释执行

    1.2 创建Shell脚本

    😏 脚本格式要求:

    (1)脚本必须以#!/bin/bash 开头,告诉系统应该用何种Shell来执行此脚本。
    (2)脚本需要设置可执行权限。

    😍脚本常用执行方式:

    (1)输入脚本绝对路径或者相对路径(首先要设置+x权限)。
    (2)直接用(sh+脚本)直接执行,不用+x权限。

    😚直接使用文本编辑程序(Vim)
    (1)创建一个hello.sh

    vim hello.sh
    #输入 i 进入文本模式,输入一下内容
    #echo 是输出命令
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    (2)存盘推出:按Esc键回到正常模式,输入:wq!
    (3)无可执行权限用(sh+脚本)

    sh hello.sh
    
    • 1

    (4)设置脚本可执行权限 chmod命令,并用相对地址执行脚本

    chmod u+x hello.sh
    ./hello.sh
    
    • 1
    • 2

    在这里插入图片描述注意:shell脚本通普通文件一样,可以没有扩展后缀,但为了方便区分,建议Bash脚本文件以sh结尾,如“shell.sh”。

    二、Shell的变量

    2.1Shell的变量

    😃Shell变量的介绍:

    (1)Shell变量分为系统变量和用户自定义变量。
    (2)系统变量:$HOME、$PWD、$HELL等等
    (3)显示当前shell中所有变量:set

    💓Shell变量的语法:

    定义变量:变量=值,=两边不能有空格。
    变量名区分大大写,建议大写。
    通过变量名前加$符号访问它的内容。
    撤销变量:unset 变量
    声明静态变量:readonly变量,静态变量不能unset。

    ⭐️$(command)语法:

    运行括号里面的结果,并把命令放回给一个变量
    A=$(data),将data的值赋值给A变量。

    🙌引号的使用:

    (1)一个参数包含一个或多个空白字符需要给参数加上引号。
    (2)双引号:“$data”,把data变量替换成它的值
    (3)单引号:’$data‘,不会发生替换行为。
    效果演示:vim var.sh 创建脚本程序

    #!/bin/bash
    #定义变量A
    A=100
    #输出变量的值
    echo A=$A
    echo A="$A"
    echo A='$A' #单引号不发生替换
    #撤销变量A
    unset A
    echo "A=$A"
    #$(command)命令,返回结果给变量
    D=$(date)
    echo 当前时间为:$D
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    执行结果:sh var.sh
    在这里插入图片描述

    2.2 设置环境变量

    👌起始也就是全局变量,在一个脚本中定义,其他程序脚本都能使用的这个环境变量。

    1.exprot 变量名=变量值 (将shell变量设置为环境变量)
    2.source 配置文件 (让修改后的配置文件立即生效,记得运行前现加一句)

    2.3 位置参数变量

    获取一个命令行的参数信息,可以使用位置参数实现。比如./envvar.sh 10 20 30,这就是一个执行shell的命令行,可以在脚本中获取参数信息。
    基本语法:

    1.$n:n代表数字,$0代表命令行内容,$1-$9代表第一到第九个参数,十个及十个以上需要用大括号包含,如${10}
    2.$*:代表命令行中的所有参数
    3.$#:代表命令行中参数的个数。

    👱编写一个shell脚本:vim envvar.sh

    #!/bin/bash
    echo "当前脚本程序的名字:$0"
    echo "当前第二个参数是:$2"
    echo "当前传递了$#个参数”
    echo "当前传递的参数分别为:$*" 
    ~                                  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2.4预定义变量

    🔒 shell设计时已经定义好的变量,可以直接在shell脚本中使用
    基本语法:

    1.$$:当前进程的进程号(PID)
    2.$!:后台运行的最后一个进程的进程号
    3.$?:最后一次执行的返回状态,如果这个变量的值为0.证明上一个命令正确执行;如果这个变量的值为非0(数值由命令自己决定),则证明上一个命令执行不正确。

    执行程序:

    #!/bin/bash
    echo "当前程序执行的进程号:$$"
    echo "最后一个进程的进程号:$!"
    echo "执行结果:$?"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果:
    在这里插入图片描述

    2.5 shell运算符

    基本语法:

    1. ( ( 运 算 式 ) ) 或 ((运算式))或 (())[运算式]或者expr m+n //expression表达式
    2.注意expr表达式有空格
    3.expr *,/,% 乘,除,取余
    4.将expr 赋值给变量需要加两个反引号` `

    #!/bin/bash
    #运算 (2+3)*2
    RES=$(((2+3)*2))
    echo RES=$RES
    #expr形式
    TEMP1=`expr 2 + 3`
    TEMP2=`expr $TEMP1 \* 3`
    echo TEMP2=$TEMP1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    三、Shell语句

    3.1条件判断语句

    基本语法:

    [ condition ] (注意condition 前后都要有空格) 非空返回true

    if [condition]
    then (表示if语句的开始)

    fi (fi表示结束)

    条件判断:
    在这里插入图片描述

    #!/bin/bash
    #判断sing 等于 sing
    if [ sing=sing ]
    then
    echo "sing和sing相等"
    fi
    ~   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    3.2if-then多分支结构

    语法格式:

    if [ condition ]
    then
     语句1
    elif [ condition2 ]
    then
     语句2
    else
     语句3
    fi (结束)

    #!/bion/bash
    #answer.sh中的代码
    if [ yes=yes ]
    then
     echo Good
    else
     echo Error
    fi
    
    exit 0
    ~            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    3.3流程控制语句

    case $变量名 in
    “值1”) 如果变量的值等于值1 ,则执行程序1 ;;
    “值2”) 如果变量的值等于值2 ,则执行程序2 ;;
    *) 如果变量的值以上值都不相等 ,则此执行程序 ;;
    esac

    #!/bin/bash
    
    A="yes"
    
    case $A in
    yes) echo "第一条语句" ;;
    no) echo "第二条语句";;
    *) echo "其他语句"
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    3.4 for循环语句

    基本语法:

    for 变量 in 集合
    do
     语句
    done

    #!/bin/bash
    
    for a in x1,x2,x3
    do
     echo $a
    done
    
    exit 0
    ~        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    3.5 read命令

    可以使用read命令将用户键盘输入赋值给一个变量。

    read(选项)(参数)
    选项:
    -p:指定读取值是的提示符;
    -t:指定读取值时的等待时间(秒),超时就不等待。

    👦代码演示在下面while语句种一块演示

    3.6 while语句

    基本语法:

    while [ condition ]
    do
    程序
    done

    #!/bin/bash
    
    echo "请输入你的密码:"
    
    read pws
    
    while [ "$pws"!="123" ]
    do
     echo "sorry,try again"
     read pws
    done
    echo "密码正确0"
    
    exit 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    四、Shell编程函数

    4.1 系统函数

    🔉这里只介绍一个,作为参考:

    basename:用于返回完整路径最后一个/的部分,常用于获取文件名。
    basename [pathname] [suffix]
    basename 命令会将所有前缀包括最后以一个“/”字符删除,然后将字符串显示出来。
    suffix 为后缀,指定的后,basename会将pathname中的后缀suffix也去掉
    在这里插入图片描述

    4.2 自定义函数

    基本语法:

    [ function ] funname[()]
    {
    Action;
    [return int;]
    }
    调用直接写函数名:funname [值]

    #!/bash/bash
    #实现两个求和,动态获取。
    
    #定义函数  
    function getSum(){
    
            SUM=$[$n1+$n2]
            echo 两数之和=$SUM
    }
    
    #动态获取两个数
    read -p "请输入第一个数n1=" n1
    read -p "请输入第二个数n2=" n2
    #调用函数,并传入参数
    getSum $n1 $n2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

  • 相关阅读:
    重要功能更新:妙手正式接入SHEIN供货模式(OBM)店铺,赋能卖家把握出海新机遇!
    Vue3 - 实现动态获取菜单路由和按钮权限控制指令
    深入理解requests库和使用方法
    pytorch基础语法问题
    目标检测算法——图像分类开源数据集汇总(附下载链接)
    【ElementUI样式优化】el-input带自定义查询删除图标 ==> 图标点击可实现对应功能 ==> 一个input实现查询重置功能
    SCI/SSCI选刊神器之——Elsevier Journal Finder
    关于Flask_自定义路由转换器的方法和使用
    使用GitHub托管自己的静态资源
    pandas按行按列遍历Dataframe的三种方式
  • 原文地址:https://blog.csdn.net/weixin_63003502/article/details/127930621