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

本文详细介绍了Shell脚本的三种执行方式及其区别,包括bash执行、直接执行和source执行,并探讨了它们对环境变量的影响。此外,还深入讲解了Shell脚本中的变量概念,包括系统变量、自定义变量和特殊变量的用法,特别是$0、$#、$*、$@和$?等特殊变量的含义和应用。内容涵盖了变量定义规则、参数传递及错误状态检查等方面,是理解Shell脚本执行和变量操作的重要参考资料。
摘要由CSDN通过智能技术生成

1. 概述

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

查看提供的shell解释器

[root@bigdata001 ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@bigdata001 ~]#

其实都是指向/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 ~]# 

3. 变量

3.1 常用系统变量

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

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

[root@bigdata001 ~]# printenv USER
root
[root@bigdata001 ~]#

可以使用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 ~]# 
  • 字符串单引号中的$是一个字符串,而不是一个特殊变量

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 ~]#

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 ~]#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值