Shell编程入门
发布日期:2022-03-04 11:48:22 浏览次数:3 分类:技术文章

本文共 2728 字,大约阅读时间需要 9 分钟。

目录

         


1 概述

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

2 Shell脚本的执行方式

2.1 脚本格式要求

  • 脚本以#!/bin/bash开头(指定解析方式)
  • 文件后缀名为.sh(不是必须的)
  • 脚本需要有可执行权限+x
  • 语句结束不需要分号结尾

2.2 编写第一个Shell脚本

   创建一个Shell脚本,输出hello world:

 

2.3 脚本的常用执行方式

   方式1:

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

        首先需要赋予脚本+x权限,然后再执行脚本

   方式2:(不推荐)

        sh + 脚本(相对路径或绝对路径)

        不用赋予脚本+x权限,直接执行即可

2.4 shell的注释

   ①单行注释:#

   ②多行注释:

        :<<!

                注释内容

         !

3 Shell变量

3.1 变量的介绍

  • Linux Shell中的变量分为系统变量和用户自定义变量。
  • 系统变量:$HOME、$PWD、$SHELL、$USER等等
    • 比如:echo $HOME

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

3.2 变量定义的规则

  • 变量名词可以由字母、数字和下划线组成,但是不能以数字开头
  • 等号两侧不能由空格
  • 变量名词一般习惯为大写
  • 将命令的返回值赋给变量(重要)
    • A=`ls -la` 反引号,运行里面的命令并把结果返回给变量A
    • A=$(ls -la) 等价于``

3.3 Shell变量的定义

   基本语法:

        定义变量:变量=

        撤销变量:unset 变量

 

        声明静态变量:readonly 变量   注意:静态变量不能unset

 

4 Shell环境变量

4.1 基本语法

  • export 变量名=变量值
    • 将shell变量输出为环境变量
  • source 配置文件
    • 让修改后的配置信息立即生效
  • echo $变量名
    • 查询环境变量的值

5 Shell位置参数变量

5.1 介绍

   当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。

   比如:./myshell.sh 100 200

        这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息

5.2 基本语法

  • $n:n为数字,$0表示命令本身,$1-$9代表第一到第九个参数,十以上的参数需要大括号包含,如${10}
  • $*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
  • $@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
  • $#:这个变量代表命令行中所有参数的个数

5.3 应用实例

6 Shell预定义变量

6.1 介绍

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

6.2 基本语法

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

6.3 应用实例

7 Shell运算符

7.1 介绍

   学习如何在Shell中进行各种运算操作

7.2 基本语法

  • "$((运算式))" 或 "$[运算式]"
  • expr m + n   
    • 注意expr运算符间要有空格
  • expr m - n
  • expr \*,/,%   乘、除、取余

7.3 应用实例

8 Shell判断语句

8.1 基本语法

  • [ condition ]
    • 注意condition前后要有空格
    • 非空返回true,可使用$?验证(0为true,>1为false)

8.2 常用判断条件

  • 两个整数的比较
    • =   字符串比较
    • -lt   小于
    • -le   小于等于
    • -eq   等于
    • -gt   大于
    • -ge   大于等于
    • -ne   不等于
  • 按照文件权限进行判断
    • -r   有读的权限
    • -w   有写的权限
    • -x   有执行的权限
  • 按照文件类型进行判断
    • -f   文件存在并且是一个常规的文件
    • -e   文件存在
    • -d   文件存在并是一个目录

8.3 应用实例

9 Shell流程控制语句

9.1 if语句

   基本语法:

        ①

        if [ 条件判断式 ];then

                程序

        fi

        ②

        if [ 条件判断式 ]

        then

                程序

        elif [ 条件判断式 ]

        then

                程序

        fi

   注意事项:

  • [ 条件判断式 ] 中括号和条件判断式之间必须有空格
  • 推荐使用第二种方式

   应用实例:

9.2 case语句

   基本语法:

        case $变量名 in

        "值1")

                如果变量的值等于值1,则执行程序1

        ;;

        "值2")

                如果变量的值等于值2,则执行程序2

        ;;

        ...省略其他分支...

        *)

                如果变量的值都不是以上的值,则执行此程序

        ;;

        esac

   应用实例:

 

9.3 for语句

   基本语法:

        ①

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

        do

                程序

        done

        ②

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

        do

                程序

        done

   应用实例:

9.4 while语句

   基本语句:

        while [ 条件判断式 ]

        do

                程序

        done

   应用实例:

10 Shell读取控制台输入

10.1 基本语法

   read(选项)(参数)

   选项:

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

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

   参数:

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

10.2 应用实例

11 Shell函数

11.1 函数介绍

   Shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

11.2 系统函数

   这里介绍两个:

        ①basename函数,返回完整路径最后/的部分,常用于获取文件名

           基本语法:

                basename[pathname][suffix]

                basename[string][suffix]

                basename命令会删掉所有的前缀包括最后一个/,然后将字符串显示出来。

           选项:

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

        ②dirname函数,返回完整路径最后/的前面部分,常用于返回路径部分

           基本语法:

                dirname 文件绝对路径

                从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录

              部分)

11.3 自定义函数

   基本语法:

        [ function ] funname[()]

        {

                Action;

                [return int;]

        }

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

        ()内不需要写形参

   应用实例:

PS:根据尚硅谷课程整理,如有侵权,联系删除。

转载地址:https://blog.csdn.net/xxyneymar/article/details/122350661 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringBoot入门(一)
下一篇:力扣题739每日温度

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月04日 18时11分58秒