当前位置: 首页 > news >正文

shell脚本(语法)

一、什么是shell脚本

1.1、shell 的两层含义:既是一种应用程序,又是一种程序设计语言

      1.1.1、shell是一种应用程序

        交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能称之为 shell 命令解析器。

        shell 是用户和 Linux 内核之间的接口程序

        用户在提示符下输入的命令都由 shell 先解释然后传给 Linux 核心。它调用了系统核心的大部分功能来执行程序、并以并行的方式协调各个程序的运行。
         Linux 系统中提供了好几种不同的 shell 命令解释器,如 sh、ash、bash 等。一般默认使用 bash 作为默认的解释器。

       1.1.2、shell是一种程序设计语言

         它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支,完成类似于 windows 下批处理操作,简化我们对系统的管理与应用程序的部署称之为 shell 脚本

二、shell和我们使用编译性语言(如c/c++)区别

      (1)我们学过的 c/c++等语言,属于编译性语言(编写完成后需要使用编译器完成编译、汇编、链接等过程变为二进制代码方可执行)

      (2)shell 脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装 shell 命令解释器的环境下执行

示例讲解 :

   当我们写完c代码的时候,需要使用   gcc  ,才可以编译成可执行文件,  再   ./ 运行文件 。shell脚本,写完代码,只需赋一个可执行权限 ,不需要用 gcc   ,就可以  ./  运行文件   或者  不用赋权限, 直接  bash  代码文件    就可运行  可执行文件

shell 脚本主要用于:
          帮助开发人员或系统管理员将复杂而又反复的操作放在一个文件中,通过简单的一步执行操作完成相应任务,从而解放他们的负担.

三、shell的简单流程

以输入 ls  -l    指令为例

第一步:创建xx.sh 文件         (如: vim   test.sh    )

第二步:进入编辑

              定义以开头:#!/bin/bash    (  #!用来声明脚本由什么 shell 解释,否则使用默认 shell)

                                                              (单个"#"号代表注释当前行)

              输入需要的指令           (如;  ls -l)

第三步:添加可执行权限     chmod   +x    test.sh

第四步:    ./test.sh

如下图结果

 

运行的  结果  和    ls  -l指令显示     一致

3.1、扩展

shell的执行方式有三种:

第一种:chmod + x test.sh ./test.sh 增加可执行权限后执行      (也就是上图的执行方法)

第二种:bash test.sh                                 (直接指定使用 bash 解释 test.sh)

第三种:. test.sh(source test.sh)              (  使用当前 shell 读取解释 test.sh)

3.2、区别:

区别1: 第三种与其它的区别

             第一种和第二种,执行时,会在后台启动一个  新的 shell   去执行脚本。

             而第三种,是直接执行本次所创建的shell脚本 ,如上图例子,即自己创建的  test.sh

区别2:第一种和第二种的区别

             第一种:运行时,计算机首先检测#!,使用#!指定的 shell,如果没有使用默认的 shell。

比如上图的例子,我使用的是  #!/bin/bash   即bash解析器

            而第二种:不检测#!,直接使用bash解析器

   四、shell的语法

4.1、变量

定义变量
                 变量名=变量值                   如:num=10   (注意:等号两边不可空格且无需变量类型
引用变量
                  $变量名                                          如:i=$num 把变量 num 的值付给变量 i
显示变量

      使用 echo 命令可以显示单个变量取值     如: echo $num     把num的值显示到终端

清除变量 

                  使用 unset 命令清除变量             如:unset   num   

例子:演示使用

输出结果

 4.2、变量的其它用法

read   string
                          从键盘输入一个字符串付给变量 string
readonly var=100
                         定义一个只读变量,只能在定义时初始化,以后不能改变,不能被清除
export var=300
                        使用 export 说明的变量,会被导出为环境变量,其它 shell 均可使用
 注意:此时必须使用 source 2_var.sh 才可以生效

例子:演示使用

输出结果

 4.3、错误用法

1、变量名只能包含英文字母下划线,不能以数字开头             

     1_num=100                                //  错误
     num_1=200                               //  正确
2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来;双引号内的特殊字符可以保有变量特性但是单引号内的特殊字符则仅为一般字符
     name=aa bb                             //错误,有空格
    name="aa bb"                         //正确,有空格q且有双引号
    echo "$name is me"               //输出:aa bb is me
    echo '$name is me'                //输出:$name is me

5、shell的其它变量用法

5.1、预设变量

 $#传给shell脚本参数的数量
 $*传给shell脚本参数的内容    与 $@ 一样
 $1、$2、$3、...、$9运行脚本时传递给其的参数,用空格隔开
 $?命令执行后返回的状态
"$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示正确任何非0值出错)。
 $0:当前执行的进程名
 $$当前进程的进程号

编程例子:

 运行结果

下一讲,shell的环境变量的使用

http://www.lryc.cn/news/1188.html

相关文章:

  • java高频面试题(2023最新)
  • 视觉感知(二):车位线检测
  • 2023.2.10学习记录Docker容器
  • 扩散模型diffusion model用于图像恢复任务详细原理 (去雨,去雾等皆可),附实现代码
  • pytorch
  • 软件测试—对职业生涯发展的一些感想
  • 5年经验之谈:月薪3000到30000,测试工程师的变“行”记!
  • 全价值链赋能,数字化助力营销价值全力释放 | 爱分析报告
  • 【自学Docker 】Docker search命令
  • 银行零售如何更贴近客户?是时候升级你的客户旅程平台了
  • 零入门kubernetes网络实战-12->基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络
  • conda环境管理命令
  • ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net
  • 1.十大排序算法
  • 算法导论—SAT、NP、NPC、NP-Hard问题
  • linux入门---基础指令(上)
  • 大数据Kylin(一):基础概念和Kylin简介
  • 推进行业生态发展完善,中国信通院第八批RPA评测工作正式启动
  • DOM编程-获取下拉列表选中项的value
  • 认证服务-----技术点及亮点
  • 6个常见的 PHP 安全性攻击
  • 三大基础排序算法——冒泡排序、选择排序、插入排序
  • 负载均衡上传webshell+apache换行解析漏洞
  • 【ESP 保姆级教程】玩转emqx数据集成篇③ ——消息重发布
  • 支持分布式部署的主流方式 - Session 持久化到 Redis
  • 计算机网络|第二章 物理层|湖科大课程|从零开始的计网学习——物理层(计网入门就看这篇!)
  • 【微服务】RabbitMQSpringAMQP消息队列
  • jenkins +docker+python接口自动化之docker下安装jenkins(一)
  • SpringBoot——Banner介绍
  • 【STL】综述