三、shell - 变量

三、shell - 变量_第1张图片

目录

1、简介

1.1 变量的定义语法:

1.2 变量的定义需遵循的规则

1.3 变量的作用域

2、用户变量

2.1 定义变量

2.2 访问变量

2.3 变量的其他赋值方式

2.4 只读变量

2.5 删除变量

​​​​​​​3、环境变量

​​​​​​​3.1 常见的环境变量

​​​​​​​3.2 自定义环境变量

​​​​​​​4、特殊变量


1、简介

shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。

在shell中有3种变量:用户变量、环境变量、特殊变量,其中用户变量在编程过程中使用量最多,环境变量主要是在程序运行时需要设置,特殊变量在对参数判断和命令返回值判断时会使用。

1.1 变量的定义语法:

变量名=变量值

1.2 变量的定义需遵循的规则

  1. 变量名可以由字母、数字和下画线组成,但是不能以数字开头。
  2. 在 Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须使用特殊命令。
  3. 变量用等号"="连接值,"="左右两侧不能有空格
  4. 变量值中如果有空格,则需要使用单引号或双引号包含,如 test="hello world!"。双引号括起 来的内容"$"和反引号者都拥有特殊含义,而单引号括起来的内容都是普通字符。
  5. 在变量值中,可以使用转义符"\"。
  6. 不能使用bash里的关键字(可用help命令查看保留关键字)。

1.3 变量的作用域

当前文件

2、用户变量

​​​​​​​2.1 定义变量

在对变量赋于字符串值时,建议使用引号将其包裹。如果字符串中存在空格,请一定要使用单引号或双引号将整个内容包裹。

注意:单引号里的内容原封不动的输出,双引号里有变量的调用则会调用变量

[root@node1 shell]# username="geeker"

​​​​​​​2.2 访问变量

要对变量进行调用时,在变量名前加美元符号$

[root@node1 shell]# echo $username

geeker

如果需要增加变量的值,那么可以进行变量值的叠加。不够变量需要用双引号包含"$变量名"或${变量名}

[root@node1 ~]# usernmae="geeker" 

[root@node1 ~]# echo $usernamedb.log #这种方式不可以 

.log

[root@node1 ~]# echo "$username"db.log #可以

geekerdb.log

[root@node1 ~]# echo ${username}db.log #可以 

geekerdb.log

测试脚本

脚本内容:test1.sh

#!/bin/bash 

string="I am shell" 

num=5 

echo "a=${num},string=${string}"

执行脚本

[root@node1 shell]# sh test1.sh

a=5,string=I am shell

​​​​​​​2.3 变量的其他赋值方式

  1. 可以使用read关键字从键盘获取内容赋值给变量
  2. 可以通过$(linux命令)或者$`linux命令`来执行linux命令,并将命令的执行结果赋值给变量

脚本内容:test2.sh

#!/bin/bash 

echo "who are you?" 

read name  #从键盘获取变量的值 

pwd_string=$(pwd) #将当前的绝对路径赋值给pwd_string变量 

date_string=`date` #将当前时间赋值给date_string变量,注意这里使用的是反引号

echo "hello, $name" 

echo $pwd_string 

echo $date_string 

执行脚本

[root@node1 shell]# sh test2.sh

who are you?

geeker

hello, geeker

/export/data/shell

2020年 05月 10日 星期日 16:50:21 CST

​​​​​​​2.4 只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:

test3.sh

#!/bin/bash 

myUrl="http://www.google.com"

readonly myUrl

myUrl="http://www.runoob.com"

运行脚本,结果如下:

/bin/sh: NAME: This variable is read only.

​​​​​​​2.5 删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用。unset 命令不能删除只读变量。

实例:

test4.sh

#!/bin/sh 

myUrl="http://www.runoob.com" 

unset myUrl

echo $myUrl

以上实例执行将没有任何输出。

​​​​​​​3、环境变量

环境变量:当shell程序启动时,都自动设置一组变量,shell中的所有命令都可以使用这些变量。环境变量可以在/etc/profile中设置,环境变量的名字习惯上使用大写字母

​​​​​​​3.1 常见的环境变量

可以使用env命令查看所有的系统环境变量

[root@node1 shell]# env

XDG_SESSION_ID=2

HOSTNAME=node1

SELINUX_ROLE_REQUESTED=

TERM=xterm

SHELL=/bin/bash

HISTSIZE=1000

SSH_CLIENT=192.168.88.5 8047 22

CONDA_SHLVL=0

SELINUX_USE_CURRENT_RANGE=

SSH_TTY=/dev/pts/0

USER=root

常见的环境变量:

PATH 决定了shell将到哪些目录中寻找命令或程序 

HOME 当前用户主目录 

HISTSIZE 历史记录数 

LOGNAME 当前用户的登录名 

HOSTNAME 指主机的名称 

SHELL 当前用户Shell类型 

LANGUGE  语言相关的环境变量,多语言可以修改此环境变量 

MAIL 当前用户的邮件存放目录 

PS1 基本提示符,对于root用户是#,对于普通用户是$

​​​​​​​3.2 自定义环境变量

1) vi /etc/profile ,在文件末尾加上要定义的环境变量,语法如下:

export 变量名=变量值

export SERVICE_HOST=www.geeker.cn

2) wq 退出

3) source /etc/profile

4) 输入 env 查看环境变量,是否有自己定义的环境变量

三、shell - 变量_第2张图片

5) 使用环境变量

 环境变量的使用方式和普通变量是一样的:$环境变量名

[root@node1 shell]# echo $SERVICE_HOST

www.geeker.cn

​​​​​​​4、特殊变量

我们可以在执行 Shell 脚本时,向脚本传递参数,这时候可以使用特殊变量来获取参数,Shell常用的特殊变量如下:

变量

解释

$#

命令行参数的个数

$n

$1表示第一个参数,$2表示第二个参数,以此类推

$0

当前程序的名称

$?

前一个命令或许或函数的返回码

$*

“参数1 参数2 。。。”形式保存所有参数

$@

“参数1”“参数2”。。。形式保存所有参数

$$

本程序的(进程ID号)PID

$!

上一个命令的PID

实例:

以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:

test5.sh

#!/bin/bash 

echo "Shell 传递参数实例!"; 

echo "执行的文件名:$0"; 

echo "第一个参数为:$1"; 

echo "第二个参数为:$2"; 

echo "第三个参数为:$3"; 

echo "参数个数为:$#"; 

echo "传递的参数作为一个字符串显示*:$*"; 

执行脚本:

[root@node1 shell]# chmod +x test5.sh

[root@node1 shell]# ./test5.sh aaa bbb ccc

Shell 传递参数实例!

执行的文件名:./demo4.sh

第一个参数为:aaa

第二个参数为:bbb

第三个参数为:ccc

参数个数为:3

传递的参数作为一个字符串显示*:aaa bbb ccc

$* 与 $@ 区别:

相同点:都是引用所有参数。

不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " $* " 等价于 "1 2 3"(传递了一个参数),而 "$@" 等价于 "1" "2" "3"(传递了三个参数)

【下一章​​​​​​​】

四、shell - 字符串

【往期回顾】

一、shell编程简介
二、shell编程快速入门

你可能感兴趣的:(shell编程超详细入门教程,shell编程从入门到精通,linux,运维,服务器,shell脚本,shell变量,shell编程)