从零开始学习Linux(三十六):Shell基础之变量

1、变量

1.1、什么是变量

变量是计算机内存中的单元,其中存放的值是可以改变。
当shell脚本需要保存一些信息时,如一个文件名或是一个数字,这时候就可以把信息存放在一个变量中。每个变量有一个名字,所以很容易通过名称引用它。

1.2、变量定义规则
  • 变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的;
  • 在bash中,变量的默认类型都是字符串型。如果要进行数值运算,则必需指定变量类型为数值型;
  • 变量用等号连接值,等号左右两侧不能有空格;
  • 变量的值如果有空格,需要使用单引号或双引号包括;
  • 在变量的值中,可以使用“\”转义符;
  • 如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令;
  • 环境变量名建议大写,便于区分;
1.3、变量分类
  • 用户自定义变量(也可以叫本地变量);
  • 环境变量:主要保存的是和系统操作环境相关的数据;
  • 位置参数变量:主要是用来向脚本中传递数据的,变量名不能自定义,变量作用是固定的;
  • 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的;

2、用户自定义变量

2.1、定义变量

定义变量name和age,如下图所示:

2.2、调用变量

使用 $变量名 的方式调用变量。

执行下面命令:

echo '我是'\$name',我今年'$age'岁'
2.3、查看变量

使用set命令,查看变量。
但是set命令返回结果有点多,看的时候要耐心一点。

或者是结合管道符和grep命令,搜索变量名称name。

set | grep name

返回结果如下图所示:

2.4、删除变量

命令格式:unset 变量名;
定义变量myname,myname=通靈鹿小六;
删除变量myname,unset myname;

整个过程如下图所示:

3、环境变量

用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

3.1、定义环境变量

命令格式: export 变量名=变量值;

3.2、查看环境变量

执行命令:env;

环境变量定义名称都是大写的,查看结果如下图所示:

3.3、调用环境变量

同用户自定义变量一样,通过$变量名的方式调用。

3.4、删除环境变量

同用户自定义变量一样,unset 变量名;

3.5、系统常见环境变量
  • PATH:系统查找命令的路径(这便是执行系统命令不用输入命令绝对路径的原因,系统会在PATH定义的所有路径中查询是否有输入的命令,找到命令后就直接执行);

4、位置参数变量

位置参数变量 作用
$n n为数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十以上的参数需要用大括号包含,如${10};
$* 代表命令行中所有的参数,$*把所有的参数看成一个整体;
$@ 代表命令行中所有的参数,不过$@把每个参数区分对待;
$# 代表命令行中所有参数的个数;
4.1、$n示例

(1)创建add.sh文件,编辑脚本内容:

#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $num1 '+' $num2 '=' $sum

(2)给文件add.sh赋予执行权限

chmod 755 add.sh

(3)执行add.sh脚本文件

./add.sh 4 9

整个过程如下图所示:


通过这个例子,可以看到将4赋予了$1,将9赋予了$2。

4.2、$*、$@、$#示例

(1)创建param1.sh文件,编辑脚本内容:

#!/bin/bash
echo "总共有 $# 个参数" #使用$#代表所有参数的个数
echo "参数是: $*" #使用$*代表所有的参数
echo "参数是: $@" #使用$@也代表所有参数

(2)给文件param1.sh赋予执行权限

chmod 755 param1.sh

(3)执行param1.sh脚本文件

./param1.sh 111 222 333

整个执行过程如下图所示:

4.3、$*和$@区别示例

(1)创建param2.sh文件,编辑脚本内容:

#!/bin/bash
echo '这是$*的输出内容'
for i in "$*"   #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
        echo "参数是: $i"
done

echo '这是$#的输出内容'
x=1
for j in "$@"   #$@中的每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几>次
do
        echo "参数是: $x is: $j"
        x=$(( $x+1 ))
done

(2)给文件param2.sh赋予执行权限

chmod 755 param2.sh

(3)执行param2.sh脚本文件

./param2.sh 111 222 333

整个执行过程如下图所示:

5、预定义变量

预定义变量 作用
$? 最后一次执行命令的返回状态。如果变量值为0,证明上一个命令正确执行;如果变量值为非0(具体返回值,由命令自己来决定),则证明上一个命令执行错误;
$$ 当前进程的进程号(PID);
$! 后台运行的最后一个进程的进程号(PID);
5.1、接收键盘输入

命令格式:read [选项] [变量名];
选项说明:

  • -p “提示信息”:在等待read输入时,输出提示信息;
  • -t 秒数:read命令会一直等待用户输入,使用 此选项可以指定等待时间;
  • -n 字符数:read命令只接受指定的字符数,就会执行;
  • -s: 隐藏输入的数据,适用于机密信息的输入;

(1)创建param3.sh文件,编辑脚本内容:

#!/bin/bash
#作者:通靈鹿小六
read -t 30 -p '请输入你的名字:' name

read -t 30 -p '请输入你的年龄:' age

read -n 1 -t 30 -p "请选择你的性别[M/F]:" gender

echo -e "\n"
echo "你叫$name,你的年龄是$age岁,你的性别是$gender!"

(2)给文件param3.sh赋予执行权限

chmod 755 param3.sh

(3)执行param3.sh脚本文件

./param3.sh

整个执行过程如下图所示:

你可能感兴趣的:(从零开始学习Linux(三十六):Shell基础之变量)