• Shell-01Shell初相识


    Shell的类型

    Linux中默认的Shell是/bin/bash,流行的Shell有ash、bash、ksh、csh、zsh等,不同的Shell都有自己的特点以及用途,在liunx里面使用的都是一般都是bash

    查看本机的shell种类

    cat /etc/shells
    /bin/sh                #是bash的一个快捷方式
    /bin/bash            #bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能
    /sbin/nologin        #表示非交互,不能登录操作系统
    /bin/dash            #小巧,高效,功能相比少一些
    /bin/csh #具有C语言风格的一种shell,具有许多特性,但也有一些缺陷
    /bin/tcsh #是csh的增强版,完全兼容csh
    
    注:/bin/sh 和 /bin/bash 是一个东西,/bin/sh 是bash的一个快捷方式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    站在用户登录的角度来说,SHELL的类型

    • 登录式shell:
      • 正常通常某终端登录
        • su - USERNAME
        • su -l USERNAME
    • 非登录式shell:
      • su USERNAME
      • 图形终端下打开命令窗口
      • 自动执行的shell脚本

    Shell的运行方式

    1、作为可执行程序

    #!/bin/bash
    .....
    
    • 1
    • 2

    将上面的代码保存为 test.sh,并 cd 到相应目录:

    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
    
    • 1
    • 2

    注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

    2、作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

    /bin/sh test.sh
    /bin/php test.php
    
    • 1
    • 2

    这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

    Shell的运行返回

    程序执行,可能有两类返回值

    1. 程序执行结果
    2. 程序状态返回代码(0-255)
      • 0: 正确执行
      • 1-255:错误执行,1,2,127系统预留;

    定义脚本退出状态码

    exit: 退出脚本
    exit #
    
    • 1
    • 2

    如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码;

    管道和重定向

    shell、管道和重定向都是liunx特别厉害的设计,一般也是结合使用

    重定向

    涉及重定向,必须了解INPUT设备与OUTPUT设备

    系统设定

    • 默认输出设备:标准输出,STDOUT, 1
    • 默认输入设备:标准输入, STDIN, 0
    • 标准错误输出:STDERR, 2
    • 标准输入:键盘
    • 标准输出和错误输出:显示器
    Linux:
    >: 覆盖输出
    >>:追加输出
    2>: 重定向错误输出
    2>>: 追加方式
    &>: 重定向标准输出或错误输出至同一个文件
    
    set -C: 禁止对已经存在文件使用覆盖重定向;
    	强制覆盖输出,则使用 >|
    set +C: 关闭上述功能
    
    /dev/null: 软件设备, bit bucket,数据黑洞    
    
    
    <:输入重定向
    <<:Here Document
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    管道

    前一个命令的输出,作为后一个命令的输入

    命令1 | 命令2 | 命令3 | ...
    
    • 1

    bash的配置文件

    bash: 脚本解释器

    • 全局配置

      • /etc/profile, /etc/profile.d/*.sh, /etc/bashrc
    • 个人配置

      ~/.bash_profile, ~/.bashrc

      • profile: 定义环境变量、运行程序或脚本
      • bashrc:定义本地变量、命令别名

    登录式shell如何读取配置文件?

    /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

    非登录式shell如何配置文件?

    ~/.bashrc --> /etc/basrc --> /etc/profile.d/*.sh

    bash调试参数

    测试脚本是否有语法错误:

    bash -n 脚本

    调试脚本:

    bash -x 脚本:打印每步执行

  • 相关阅读:
    【AI视野·今日NLP 自然语言处理论文速览 第四十三期】Thu, 28 Sep 2023
    QT 实现 TCP 客户端服务器代码
    如何切换npm源 - nrm
    ANR问题分析的一般套路
    Antv/G2 自定义折线图线条样式及tootip提示信息样式
    Redis进阶:图文讲解Redis底层数据结构之embstr,raw,ziplist,quicklist和hashtable (带源码讲解)
    云计算实验2 Spark分布式内存计算框架配置及编程案例
    力扣练习——33 原子的数量
    Verilog基础:三段式状态机与输出寄存
    java面试题,各大企业常见的java笔试题及答案(精华)
  • 原文地址:https://blog.csdn.net/a13554371686/article/details/126800180