码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一篇文章让你彻底掌握 shell 语言


    一篇文章让你彻底掌握 shell 语言

      • 1. 前序
      • 2. shell介绍
        • 2.1. 什么是shell
        • 2.2. 什么是shell编程
        • 2.3. shell解释器
      • 3. 基本语法
        • 3.1 第一个shell脚本
        • 3.2 注释
        • 3.3. echo
          • 3.3.1 **输出字符串**
          • 3.3.2 **输出变量**
          • 3.3.3 **启用转义字符**
          • 3.3.4 **向文件添加内容**
          • 3.3.5 **输出命令执行结果**
          • 3.3.6 **输出文件**
        • 3.4. printf
        • 3.5 变量
          • 3.5.1 变量名命名规则:
          • 3.5.2 定义变量:
          • 3.5.3 使用变量:
          • 3.5.4 只读变量:
          • 3.5.5 删除变量:
          • 3.5.6 变量类型:
        • 3.6 字符串
          • 3.6.1 **单引号:**
          • 3.6.2 **双引号:**
          • 3.6.3 **不用引号:**
          • 3.6.4 **字符串方法**
        • 3.7 数组
          • 3.7.1 **定义数组:**
          • 3.7.2 **读取数组元素:**
          • 3.7.3 **获取数组长度:**
          • 3.7.4 **删除数组元素:**
        • 3.8 运算符
          • 3.8.1 算术运算符
          • 3.8.2 关系运算符
          • 3.8.3 布尔运算符
          • 3.8.4 逻辑运算符
          • 3.8.5 字符串运算符
          • 3.8.6 文件测试运算符
      • 4. 流程控制
        • 4.1 选择结构
          • 4.1.1 if语句
          • 4.1.2 case语句
        • 4.2 循环结构
          • 4.2.1 for循环
          • 4.2.2 while循环
          • 4.2.3 until循环
          • 4.2.4 select in循环
          • 4.2.4 break和continue
      • 5. 函数
        • 5.1 函数定义
        • 5.2 函数调用
        • 5.3 函数返回值
      • 6. 其他
        • 6.1 test 和 []
        • 6.2 [[]] 和 []
        • 6.3 (())命令
        • 6.4 source命令

    1. 前序

    手动安装jdk

    # 第1步 切换到家目录
    cd
    # 第2步 下载jdk镜像源
    wget -c https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz
    
    # 第3步 新建/opt/java目录
    mkdir /opt/java
    
    # 第4步 解压jdk至/opt/java目录下
    tar -xvf jdk-8u151-linux-x64.tar.gz -C /opt/java
    
    # 第5步 设置软链接
    ln -s /opt/java/jdk1.8.0_151/bin/java /usr/sbin/java
    
    # 第6步 java命令是否可用
    java -version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    存在问题:

    1、得特别熟悉安装软件

    2、每次安装都要去捋安装思路;

    3、每安装一步,都需要手动敲命令,耗时耗力;

    4、部署n台,更加耗时,效率低…

    问题解决方法:shell编程,编写shell脚本

    2. shell介绍

    2.1. 什么是shell

    • shell是一门编程语言,类似python、php一样的解释型编程语言

    2.2. 什么是shell编程

    编写的代码文件运行在shell编程语言环境中,类似编写运行在python、php编程语言环境下的代码文件,因为shell是一门解释型语言,所以也称为编写shell脚本(shell script),文件名后缀常用.sh

    2.3. shell解释器

    常见shell解释器有以下几种:

    • Bash (Bourne Again Shell): Bash是最常用的Shell解释器,也是默认的Linux命令行解释器。它继承了Bourne Shell的特性,并添加了许多功能和改进,包括命令历史、自动补全、作业控制等。

    • sh (Bourne Shell): Bourne Shell是Unix系统中最早的Shell解释器之一,它是其他Shell的基础,语法相对简单,常用于编写脚本。

    • csh (C Shell):C Shell使用C语言风格的语法,提供了一些便于程序员使用的功能,如命令行编辑和作业控制。它在某些Unix系统中是默认的Shell解释器。

    • ksh (Korn Shell: Korn Shell是由Bourne Shell和C Shell发展而来的Shell解释器,它继承了两者的特性,并添加了一些新的功能和语法,如命令历史、命令别名等。

    • tcsh (Enhanced C Shell): tcsh是C Shell的扩展版本,提供了更多的功能和命令补全等增强特性。

    查看系统正在使用解释器

    env
    
    echo $SHELL
    
    • 1
    • 2
    • 3

    查看系统已安装解释器

    cat /etc/shells
    
    chsh -l
    
    • 1
    • 2
    • 3

    切换系统解释器

    # 需要退出重登
    chsh
    
    # 需要退出重登
    chsh -s /bin/sh
    
    exec bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    交互式shell和非交互式shell

    交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。

    [root@centos ~]# pwd
    /root
    
    • 1
    • 2

    非交互式模式:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。

    sh test.sh
    
    • 1

    3. 基本语法

    3.1 第一个shell脚本

    # 打开test.sh文件
    vim test.sh
    
    # test.sh文件写入内容
    echo "hello,world"
    
    # sh解释器执行脚本
    sh test.sh
    
    # bash解释器执行脚本
    bash test.sh
    
    # 给test.sh加可执行权限
    chmod +x test.sh
    
    # 用系统默认解释器运行test.sh脚本
    ./test.sh
    
    /root/test.sh
    
    # 也可以给test.sh脚本指定shell解释器
    [root@centos ~]# cat test.sh
    #!/bin/sh
    echo "hello,world"
    
    # 推荐这种方式指定shell解释器
    [root@centos ~]# cat test.sh 
    #!/usr/bin/env sh
    echo "hello,world"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3.2 注释

    注释起到说明描述作用,解释器执行文件(脚本)时会被忽略掉。

    • 单行注释:以#开头,到行尾内容会被解释器忽略掉
    • 多行注释:以:<开头,到EOF结尾之间的内容会被解释器忽略掉
    [root@centos ~]# cat test.sh 
    #!/usr/bin/env sh
    
    # 作者:buddha
    # 作用:测试脚本,可删除
    
    echo 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Vue:object变化侦测
    识别一切模型RAM(Recognize Anything Model)及其前身 Tag2Text 论文解读
    自动驾驶传感器技术
    有关供应链大赛的一些习得的经验和感受
    COBOL语言总结(三)--JCL扩展
    公寓报修系统(IDEA,SSM,MySQL)
    Centos7安装SCL源
    拖拽式万能DIY小程序源码系统 5分钟创建一个小程序,操作简单 带完整的部署搭建教程
    初见QT,控件的基本应用,实现简单登录窗口
    Nwafu-Oj-1444 Problem l C语言实习题七——2.结构体数组的定义与引用
  • 原文地址:https://blog.csdn.net/rulaixiong/article/details/134472197
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号