三、shell - 变量

目录

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 查看环境变量,是否有自己定义的环境变量

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编程快速入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235928.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Logstash使用指南

介绍 Logstash是一个开源数据收集引擎,具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。尽管Logstash的早期目标是搜集日志,现在它的功能已完全不只于此。任何事件类型都可以加入分析&…

【机器视觉技术栈】- 机器视觉基础

1.1 为什么采用机器视觉 人眼与机器视觉对比 人眼机器视觉精确性差,64灰度级,不能分辨小于100微米的目标强,256灰度级,可检测微米级目标速度慢,无法看清间隔小于40毫秒的运动目标快,快门时间可达10微秒适…

7.23 SpringBoot项目实战【评论】

文章目录 前言一、编写控制器二、编写服务层三、Postman测试前言 我们在 7.4 和 7.20 都曾实现过 评论列表,本文我们继续SpringBoot项目实战 评论 功能。逻辑实际相当Easy:一个学生 对 任意书 都可以 多次评论,但需要经过审核! 回顾一下 4.2 的数据库设计,学生图书评论表…

每日一练2023.11.30——验证身份【PTA】

题目链接 :验证身份 题目要求: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5&a…

C语言--有三个字符串,要求找出其中长度最大的那一个

一.题目描述 有三个字符串,要求找出其中长度最大的那一个。 比如:输入三个字符串是: 第一个字符串:hello 第二个字符串:worldasd 第三个字符串:abcd 输出:最长的字符串是:worldasd 二.思路分析…

Echarts 设置数据条颜色 宽度

设置数据条颜色(推荐) let yData [{value: 500,time: 2012-11-12,itemStyle: //设置数据条颜色{normal: { color: red }}},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}]…

近期知识点

aop (1) 要求利用AOP记录用户操作日志。内容包含以下信息:ip地址、用户名、请求的地址,请求的时间 ( 4 分) (2)要求利用AOP记录用户操作日志,日志记录到文本文件。内容包含以下信息&#xff…

LeetCode(43)快乐数【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 快乐数 1.题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也…

IDEA maven无法下载源代码处理

1、使用idea内置maven 在idea中新增一个mvn运行项,截图如下: 输入命令: dependency:resolve -Dclassifiersources 2、如果外部maven,不使用idea内部maven 在工程目录下命令行执行命令: mvn dependency:resolve -Dclassifiersources

基于Web邮箱的邮件系统

题目: 基于web的邮件收发系统设计与实现 摘 要 计算机的应用已经越来越广泛,它从产生到完善已经差不多有50年左右的历史,更新换代速度非常快,在人们生活、工作中都发挥了不可替代的作用,几乎所有行业都离不开它,已经成…

【驱动】串口驱动分析(三)-serial driver

简介 前两节我们介绍串口驱动的框架和tty core部分。这节我们介绍和硬件紧密相关的串口驱动部分。 UART驱动部分依赖于硬件平台,而TTY驱动和具体的平台无关。虽然UART部分依赖于平台,但是不管是哪个硬件平台,驱动的思路都是一致的&#xff…

哈希思想的应用:位图、布隆过滤器及哈希切割

一.位图引入 给40定亿个不重复的无符号整数存储在文件中,如何判断一个数在不在其中? 分析:最容易想到的思路是将这些数字存储到某个能够实现快速查找的容器中,如红黑树或哈希表。 但是,10亿个字节大约占1G内存&#x…