linux基础学习-19.3-Shell脚本-变量

时间:2021-12-02 02:38:38

一、shell环境变量

1、变量类型 {#31-变量类型}

变量可分为2类

1)环境变量(也可以为全局变量);可以在创建他们的shell及其生出来的子shell中使用,环境变量又可以分为自定义环境变量和bash内置的环境变量。

2)局部变量(普通变量);只能在创建他们的shell函数或shell脚本中执行使用。

环境变量

环境变量用于定义shell的运行环境,保证shell命令的正确执行,shell通过环境变量来确定登陆用户名、命令路径、终端类型、登陆目录等,所有的环境变量都是全局变量,可用于所有子进程中,包括编辑器、shell脚本和各类应用。但crond计划任务除外,还需要重新定义环境变量。

环境变量可以在命令行中设置,但用户退出这些变量志也会丢失,因此最好在用户家目录的.bash_profile文件中或全局配置/etc/bashrc 、/etc/profile 文件或者/etc/profile.d 目录中定义。将环境变量放入profile 文件中,每次用户登陆这些变量值都将初始化。

通常,所有环境变量均为大写。环境变量应用于用户进程前,都因该用export命令导出。

例如:export OLDBOY=1 {#例如:export-oldboy1}

二、shell局部变量

1、 shell中变量名及变量内容的要求

一般是字母、数字、下划线组成。且以字母开头。如oldboy oldboy123 oldboy\_training .变量的内容,可以使用单引号或双引号引起来,或不加引号。

虽然变量可以下划线开头,但类似变量都是比较特殊的,都是系统自己用的,我们尽量少用。

[root@oldboyedu ~]# _123=eee

[root@oldboyedu ~]# echo $_123

eee

[root@oldboyedu ~]# a=192.168.1.2

[root@oldboyedu ~]# echo "a=$a"

a=192.168.1.2

[root@oldboyedu ~]# b='192.168.1.2'

[root@oldboyedu ~]# echo "b=$b"

b=192.168.1.2

[root@oldboyedu ~]# c="192.168.1.2."

[root@oldboyedu ~]# echo "c=${c}"

c=192.168.1.2.

2、变量名及变量内容定义小结

1)变量名只能由字母、数字。下划线组成,且以字母开头。

2)规范的变量名写法定义:见名知意。

a: OldboyAge=1 每个单词首字母大写

b: oldboy_age=1 每个单词之间用“_”

c:oldboyAgeSex=1 驼峰语法;首个单词字母小写,其余单词首字母大写。

3)=号的知识,a=1中的等号是赋值的意思,比较是不是相等于为“==”

4)打印变量,变量名前接$符号,变量名后接紧接字符时候,要用大括号括起来

5)注意变量内容引用方法,一般为双引号,简单连续字符可以不加引号,希望原样输出,使用单引号。

6)变量内容是命令,要用反引号``或者$()把变量括起来使用。

三、特殊变量

1、位置变量

1)$0 获取当前执行的shell脚本的文件名,如果执行脚本带路径那么就包括脚本路径。

2)$n 获取当前执行的shell脚本的第n个参数值,n=1..9, 当n为0时表示脚本的文件名,如果n大于9用括号括起来{10}{11}…… ,参数以空格隔开。

3)$#获取当前执行的shell脚本后面接参数的总个数。

[root@oldboyedu scripts]# vim arg.sh

#!/bin/bash

##############################################################

# File Name: arg.sh

# Version: V1.0

# Author: oldboy

# Organization: www.oldboyedu.com

# Created Time : 2017-02-21 21:46:56

# Description:

##############################################################

echo $0

echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13}

echo $#

arg.sh [+] 10,8 All

"arg.sh" 22L, 301C written

[root@oldboyedu scripts]# sh arg.sh

arg.sh

[root@oldboyedu scripts]# sh /server/scripts/arg.sh

/server/scripts/arg.sh

[root@oldboyedu scripts]# sh arg.sh 1 2 3 1 1 2 2 2 2 2 2 1 1 2 1 2 1

arg.sh

1 2 3 1 1 2 2 2 2 2 2 1 1

17

[root@oldboyedu scripts]# sh arg.sh 1 2 3 1 1 2 2 2 2 2 2 1 1 2 1 2 1 3 8 9 8 6

arg.sh

1 2 3 1 1 2 2 2 2 2 2 1 1

22

2、进程状态变量

$? 获取执行上一个指令的返回值(0为成功,非0为失败)

测试

[root@oldboyedu scripts]# cd /ddf

-bash: cd: /ddf: No such file or directory

[root@oldboyedu scripts]# echo $?

1

[root@oldboyedu scripts]# sh arg.sh

arg.sh

0

[root@oldboyedu scripts]# echo $?

0

小结:

$?返回值参考

0 表示运行成功

2权限拒绝

1-125表示运行失败,脚本命令、系统命令错误或参数传递错误。

126 找到该命令,但无法执行

127 未找到要运行的命令

>128 命令被系统强制结束

四、变量的数值计算

1、 (()) 用法(常用于简单的整数运算)

[root@oldboyedu scripts]# echo $((1*2+3/4-4))

-2

[root@oldboyedu scripts]# echo $[1*2+3/4-4]

-2

[root@oldboyedu scripts]# ((a=1+2*3-4%3))

[root@oldboyedu scripts]# echo $a

6

[root@oldboyedu scripts]# ((a=1+2**3-4%3))

[root@oldboyedu scripts]# echo $a

8

[root@oldboyedu scripts]# b=$((1+2**3-4%3))

[root@oldboyedu scripts]# echo $b

8

[root@oldboyedu scripts]#

小结 {#小结:}

1)“(())” 在命令行执行时不需要$符号,但是输出需要$符号。

2)“(())” 里所有字符之间有无或多个空格没有任何影响。

3)[ ]与(()) 作用是一样的

2、算术运算符号

linux基础学习-19.3-Shell脚本-变量五、如何定义变量

1、脚本中直接赋值

[root@oldboyedu scripts]# vim arg.sh

#!/bin/bash

a=6

b=2

echo "a-b =$(( $a - $b ))"

echo "a+b =$(( $a + $b ))"

echo "a*b =$(( $a * $b ))"

echo "a/b =$(( $a / $b ))"

echo "a**b =$(( $a ** $b ))"

echo "a%b = $(( $a % $b ))"

[root@oldboyedu scripts]# sh arg.sh

a-b =4

a+b =8

a*b =12

a/b =3

a**b =36

a%b = 0

2、命令行传参 {#72-命令行传参}

利用位置变量

[root@oldboyedu scripts]# vim arg.sh

#!/bin/bash

a=$1 #不需要把后面的$a、$b都改 {#a1---不需要把后面的a、b都改}

b=$2

echo "a-b =$(( $a - $b ))"

echo "a+b =$(( $a + $b ))"

echo "a*b =$(( $a * $b ))"

echo "a/b =$(( $a / $b ))"

echo "a**b =$(( $a ** $b ))"

echo "a%b = $(( $a % $b ))"

练习题

1、shell都有哪些变量

2、如何设置变量及设置变量的规则都有哪些?

3、叙述如何定义变量?

4、说出5个算数运算符及含义