shell编程学习笔记

shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,可以用shell来启动、挂起、停止、编写一些程序。

快速入门

  • 脚本格式要求

    1. 脚本以#!/bin/bash开头
    2. 脚本需要有可执行权限
  • 编写一个shell脚本输出hello world

    1. 新建一个myShell.sh脚本

    2. 编辑脚本内容

      image-20210206082924384

    3. 赋予脚本执行权限

      image-20210206083019950

      image-20210206083152272

  • 脚本的常用执行方式

    1. 输入脚本的绝对路径或相对路径

      image-20210206083215670

    2. sh+脚本

      说明:这种方式可以不用赋予脚本可执行权限,直接运行即可

      image-20210206083616278

shell变量

shell变量分为,系统变量和用户自定义变量。系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等。

系统变量

  • 输出系统变量

    image-20210206085101690

    注:使用$引用变量

    image-20210206085200523

  • 显示shell中的所有变量:set

    image-20210206085355369

用户变量

  • 语法

    1. 定义变量:变量名=变量值
    2. 撤销变量:unset 变量
    3. 声明静态变量:readonly 变量。静态变量不能unset
  • 定义变量规则

    1. 变量名称可由字母、数字和下划线组成,数字不能开头
    2. 等号两侧不能由空格
    3. 变量名一般习惯为大写
  • 将命令的返回值赋值给变量

    1. A=`ls -la` 反引号,运行引号里面的命令,并将结果返回给变量A
    2. A=$(ls -la)
  • 案例一:声明用户变量

    image-20210206090239249

    image-20210206090408699

  • 案例二:静态变量不能unset

    image-20210206091056846

    image-20210206091208737

  • 案例三:引用命令运行结果

    image-20210206094722601

    image-20210206094755569

设置环境变量

  • 语法

    1. export 变量名=变量值(将shell变量输出为环境变量)
    2. source 配置文件(使修改后的配置文件生效)
    3. echo $变量名(查询环境变量的值)
  • 案例

    image-20210206121156432

    image-20210206121230253

位置参数变量

当执行shell脚本时,希望获取到命令行的参数,就可以使用位置参数变量。比如,./myShell.sh 100 200,这个shell命令,可以在shell脚本中获取到参数信息。

  • 语法

    $n:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 第 十 个 以 上 的 参 数 , 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,第十个以上的参数,需要用大括号包含,如 9(10)

    $*:代表命令中的所有参数,把所有参数看成一个整体

    $@:代表命令中的所有参数,把每个参数区分对待

    $#:代表命令中所有参数的个数

  • 案例

    image-20210206123223190

    image-20210206123309178

预定义变量

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

  • 语法

    $$:表示当前进程的进程号(PID)

    $!:表示后台运行的最后一个进程的进程号(PID)

    $?:表示最后一次执行的命令的返回状态,0代表上一个命令正常执行,非0则代表上一个命令执行不正确

  • 案例

    image-20210206124741729

    image-20210206124826090

运算符

  • 语法

    1. ( ( 运 算 符 ) ) 或 ((运算符))或 (())[运算符]

    2. expr m + n

      注意:expr运算符间要有空格。

    3. expr /*,/,% 乘,除,取余,乘要“/”转义

  • 案例

    image-20210206132416417

    image-20210206132455525

条件判断

  • 基本语法

    [ condition ] (注意condition前后又空格)

    #非空返回true,可使用$?验证(0-true,>1-false)

  • 判断语句

    1. 两个整数判断

      =:字符串比较

      -lt:小于

      -le:小于等于

      -eq:等于

      -gt:大于

      -ge:大于等于

      -ne:不等于

    2. 按照文件权限判断

      -r 文件:有读的权限

      -w 文件:有写的权限

      -x 文件:有执行权限

    3. 按照文件类型判断

      -e 文件:判断文件是否存在

      -d 文件:文件存在且是一个目录

  • 案例

    image-20210207133128830

    image-20210207133157019

流程控制

if

  • 语法形式1

    if [ 条件判断 ];then
    程序
    fi
    
  • 语法形式2

    if [ 条件判断 ]
    then
    程序
    elif [ 条件判断 ]
    then
    程序
    fi
    
  • 注意:[ 条件表达式 ],中括号和条件表达式之间必须有空格

  • 案例

    image-20210207140721357

    image-20210207140802588

case

  • 语法

    case $变量名 in
    "value1")
    如果变量值等于value1则执行
    ;;
    "value2")
    如果变量值等于value1则执行
    ;;
    *)
    如果变量值都不等于以上的值,则执行此程序
    ;;
    esac
    
  • 实例

    image-20210207155722363

    image-20210207155822488

for循环

  • 语法1

    for 变量 in 值1 值2 值3 ...
    do
    程序
    done
    
  • 语法2

    for((初始值;循环控制条件;更新变量))
    do
    程序
    done
    
  • 实例

    image-20210207161142029

    image-20210207161205334

image-20210207161532305

image-20210207161628369

while循环

  • 语法

    while [ 条件表达式 ]
    do
    程序
    done
    
  • 实例

    image-20210207181128905

    image-20210207181230552

read读取控制台输入

  • 语法

    read [选项] [参数]

    • 选项

      -p:指定读取时的提示符

      -t:指定读取等待时间(秒),如果没有在指定时间内输入,就不再等待

    • 参数

      变量:指定读取值的变量名

  • 实例

    image-20210207203805457

    image-20210207203836806

函数

shell既有系统函数,也可以自定义函数。

系统函数

  • basename

    • basename [path] [suffix] 功能:返回完整路径最后/的部分,常用于获取文件名
    • basename [string] [suffix] 功能:删掉所有的前缀包括最后一个“/”字符,然后将字符串显示出来

    选项:suffix为后缀,如果suffix指定了,basename会将pathname或string中的suffix去掉。

  • 实例

    image-20210207211249014

  • dirname

    dirname 文件绝对路径

    功能:返回完整路径最后/的前面部分,常用于返回文件路劲

  • 实例

    image-20210207211753114

自定义函数

  • 语法

    function funName()
    {
    	函数体;
    	[return int;]
    }
    

    调用直接写函数名:funname[值]

  • 实例

    image-20210207213306516

    image-20210207213330973

]

  • dirname

    dirname 文件绝对路径

    功能:返回完整路径最后/的前面部分,常用于返回文件路劲

  • 实例

    [外链图片转存中…(img-usOvTRhb-1612708535084)]

自定义函数

  • 语法

    function funName()
    {
    	函数体;
    	[return int;]
    }
    

    调用直接写函数名:funname[值]

  • 实例

image-20210207213306516
image-20210207213330973

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值