• Centos7 Shell编程之概述、变量(常用系统变量、自定义变量、特殊变量)


    1. 概述

    Shell不但是一个命令行解释器,接收应用程序/用户命令,然后调用操作系统内核。还是一个编程语言

    查看提供的shell解释器

    [root@bigdata001 ~]# cat /etc/shells 
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其实都是指向/bin/bash

    2. sh脚本执行的三种方式

    下面方式执行hello.sh,会再启动一个子shell进行sh文件的执行。可能获取不到当前shell的环境变量
    方式一(不需要+x权限):bash hello.sh
    方式二(需要+x权限):./hello.sh

    下面方式执行hello.sh,会在当前shell进行sh文件的执行
    方式三:source hello.sh或 . hello.sh

    输入bash会进入一个子shell

    [root@bigdata001 ~]# ps -f
    UID        PID  PPID  C STIME TTY          TIME CMD
    root     17986 17983  0 12:35 pts/0    00:00:00 -bash
    root     18266 17986  0 12:38 pts/0    00:00:00 ps -f
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# bash
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# ps -f
    UID        PID  PPID  C STIME TTY          TIME CMD
    root     17986 17983  0 12:35 pts/0    00:00:00 -bash
    root     18272 17986  0 12:38 pts/0    00:00:00 bash
    root     18319 18272  0 12:38 pts/0    00:00:00 ps -f
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# exit
    exit
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3. 变量

    3.1 常用系统变量

    $HOME、$PWD、$SHELL、$USER等

    可以使用env或printenv命令查看所有全局系统变量。也可以查看某个全局系统变量

    [root@bigdata001 ~]# printenv USER
    root
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3

    可以使用set命令查看所有全局、局部系统变量和用户自定义变量

    3.2 自定义变量

    基本语法

    • 定义变量:变量名=变量值,注意=号前后不能有空格
    • 撤销变量:unset 变量名
    • 声明静态变量:readonly变量,静态变量不能被unset。例如:readonly my_var=6

    变量定义规则

    • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建 议大写
    • 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。数值运算my_var=$((1+5))my_var=$[1+5]
    • 变量的值如果有空格,需要使用双引号或单引号括起来

    注意:通过变量名=变量值定义的变量,只能在当前shell访问,不能在子shell访问。想要在子shell访问,需要export 变量名。但是在子shell进行export,父shell是访问不了的

    3.3 特殊变量

    3.3.1 $数字

    • $0:代表该脚本名称
    • $1-$9:代表第一到第九个参数
    • 第十个参数开始需要用大括号包含,如${10}

    示例如下:

    [root@bigdata001 ~]# cat test.sh
    #!/usr/bin/sh
    
    echo $0
    echo "hello $1"
    [root@bigdata001 ~]#
    [root@bigdata001 ~]# sh ./test.sh li_si
    ./test.sh
    hello li_si
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 字符串单引号中的$是一个字符串,而不是一个特殊变量

    3.3.2 $#

    统计脚本参数个数

    3.3.3 $*、$@

    • $*:把脚本的所有参数看成一个整体的字符串
    • $@:把脚本的所有参数看成一个数组

    示例如下:

    [root@bigdata001 ~]# cat test.sh 
    #!/usr/bin/sh
    
    echo '=============$*============'
    for i in "$*"
    do
        echo $i
    done
    
    echo '=============$@============'
    for i in "$@"
    do
        echo $i
    done
    
    [root@bigdata001 ~]# sh test.sh a b c
    =============$*============
    a b c
    =============$@============
    a
    b
    c
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    3.3.4 $?

    查看上一个命令执行的返回状态。执行正常返回状态为0,执行非正常返回状态为非0

    [root@bigdata001 ~]# cat test.sh
    #!/usr/bin/sh
    
    no_command
    echo $?
    [root@bigdata001 ~]#
    [root@bigdata001 ~]# sh ./test.sh
    ./test.sh:行3: no_command: 未找到命令
    127
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# echo $?
    0
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    FL Studio Fruity Edition2024中文入门版Win/Mac
    油/水溶性CdS-ZnS/InP-ZnS/ZnSe-ZnS/CdSe/ZnS量子点的应用
    电子商务交易系统的设计与实现(javaee+mysql)
    RocketMQ源码阅读(六)CommitLog
    你绝对不知道的JMeter中如何实现接口之间的关联?
    Python表白比心
    从零开始配置vim(24)——自动补全
    /var/lib/docker/aufs/mnt/ 空间占用高问题解决\查看磁盘空间
    【期末大作业】基于HTML+CSS+JavaScript网上订餐系统(23个页面)
    数据挖掘-KNN算法+sklearn代码实现(六)
  • 原文地址:https://blog.csdn.net/yy8623977/article/details/125882748