Shell脚本的变量

2023-11-13

目录

1、Shell脚本变量简介

2、变量的作用

3、变量的类型

4、自定义变量

4.1自定义变量命名要求

4.2定义与查看变量

4.3赋值时使用的引号

4.4从键盘输入内容为变量赋值

4.5 变量的运算

4.5.1整数变量的运算

4.5.2浮点数运算

5、环境变量

5.1环境变量配置文件

5.2设置变量的作用范围

5.2.1export命令

5.2.2将变量名添加进配置文件/etc/profile

6、只读变量

7、位置变量

8、预定义变量


1、Shell脚本变量简介

变量是计算机语言中能储存计算结果或能表示值的抽象概念。保存将来会变化的数据,即使数据变

化,直接调用变量即可。

Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或

系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。

2、变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义

  • 变量值:能够根据用户设置、系统环境的变化而变化

3、变量的类型

  • 自定义变量:由用户自己定义、修改和使用

  • 特殊变量:环境变量,只读变量,位置变量,预定义变量

环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改    有些规定好的变量 放在那里让你使用

4、自定义变量

4.1自定义变量命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=

  • 只能使用数字、字母及下划线,且不能以数字开头

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰 StudentFirstName

  • 小驼峰 studentFirstName

  • 下划线 student_name

4.2定义与查看变量

  • 定义变量

变量名以字母或下划线开头,区分大小写,建议全大写

变量名=变量值
  • 查看变量值
echo $变量名

 使用大括号{}定义变量的范围,将变量名分隔出来

  • 删除变量unset

4.3赋值时使用的引号

  • 双引号" ":允许通过$符号引用其他变量值
  • 单引号' ':禁止引用其他变量值,$视为普通字符,
  • 反撇号``:命令替换,提取命令执行后的输出结果与$( )效果相同
  • {}可以分隔变量值
  • 定义变量时中间有特殊字符时 比如空格 用单引号或者双引号括起来

 双引号与单引号

 定义变量时中间有特殊字符

 单引号与$()

4.4从键盘输入内容为变量赋值

格式:read 变量名

  • read -p "提示内容" 变量名

  • read 变量名
[root@localhost ~]# vim score.sh
--------------------------------------------------
#!/bin/bash
#输出成绩脚本
echo -n "请输入你的成绩:"
read score
echo $score
[root@localhost ~]# bash score.sh 
请输入你的成绩:99
99

 

 

4.5 变量的运算

4.5.1整数变量的运算

shell默认只支持整数的运算

运算符:+ 加法、- 减法、* 乘法、/除法、% 取余

格式:expr 变量1 运算符 变量2 [运算符 变量3](计算乘法时,需要使用“\”转义符)
var=$ ( expr变量1运算符变量2)
var=$((变量1 运算符 变量2))
var=$[ 变量1 运算符 变量2 ]
let var=变量1 运算符 变量2

let i++   i=$[$i+1]
let i--   i=$[$i-1]
let i+=2  i=$[$i+2]
let i/=2  i=$[$i/2]

4.5.2浮点数运算

  • 使用bc计算器
echo "浮点运算字符串" | bc
echo "scale=小数位数;浮点运算字符串" | bc

 

  • 使用awk
awk 'BEGIN {print 浮点运算字符串}'

5、环境变量

使用env查看环境变量

常用环境变量

  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录
  • $PATH 表示可执行用户程序的默认路径

环境变量:

  • 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

  • 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

  • 一般只在系统配置文件中使用,在脚本中较少使用

5.1环境变量配置文件

四个系统级的环境配置变量/etc/profile  /etc/bashrc 或者(自己家目录中的)/root/.bash_profile/ root/.bashrc .bash_profile  /root/.bashrc

  • /etc/profile 

系统每次启动都会自动执行 /etc/profile 文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)

  • ~/.bash_profile ~/.bashrc

不同用户登录系统 会自动执行 自己家目录中的 ~/.bash_profile 文件中的命令,自动执行 ~/.bashrc ~/.bashrc 当前用户每切换一个shell环境都会自动执行

  • /etc/bashrc

/etc/bashrc 针对所有用户的,用户每切换一个shell环境都会自动执行

5.2设置变量的作用范围

5.2.1export命令

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用

export 变量名
export 变量名=变量值

5.2.2将变量名添加进配置文件/etc/profile

  • 子进程中定义一个变量 退出子进程当前环境,回到父进程变量值不存在

  •  换个终端打开shell
终端1
[root@localhost ~]# export k=key
[root@localhost ~]# echo $k
key
终端2
[root@localhost ~]# echo $k
##没有任何输出
[root@localhost ~]#

所以,在子进程中定义一个变量 退出子进程当前环境 export变量就会自动消失,换个终端打开shell定义的全局变量 export也会消失所以定义全局变量时通常加入 配置文件/etc/profile

使用export全局变量,将export放入/etc/profile

[root@localhost ~]#vim/etc/profile
---------------------------
export number=11
[root@localhost ~]#source /etc/profile ##刷新配置文件
[root@localhost ~]#echo $number
11

6、只读变量

变量值不允许修改(重新赋值)的情况

法使用 unset删除

最快方法重启

7、位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 、${10}表示

$10:表示位置变量$1后面跟着0

[root@localhost ~]# vim 1.sh

#!/bin/bash
#位置变量
echo $3
echo ${10}
echo $10
[root@localhost ~]# bash 1.sh a b c 4 5 6 7 q y d w
c  ##对应$3
d  ##对应${10}
a0 ##对应$10

8、预定义变量

$0 : 代表脚本本身

$# : 代表脚本后面跟的参数(位置变量)的个数

$* : 不加双引号的话 $* 和$@都代表脚本后面跟的所有参数,加上双引号 "$*" 会把所有参数当做一个整体的参数(此时参数数量为1)去看待

$@ : 加上双引号 "$@" 会把脚本后面跟的每一个参数当做一个个体去看待

$? :代表上一条命令或者脚本执行后返回的状态码,返回值为0表示执行正确,为非0值表示执行异常  还可以在return 退出函数时获取的返回值(0-255,超过部分 %256 取余)

$$:代表当前进程

  • $0脚本本身
[root@localhost ~]# vim 1.sh
#!/bin/bash
echo "$0"

[root@localhost ~]# bash 1.sh 
1.sh

 

  • $?上一条命令或者脚本执行后返回的状态码

  •  $#脚本后面跟的参数(位置变量)的个数
[root@localhost ~]# vim 1.sh

#!/bin/bash
echo $#  ##输出脚本后跟的参数个数

[root@localhost ~]# bash 1.sh 1 2 3
3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本的变量 的相关文章

随机推荐

  • labelme安装过程

    在Windows上的安装 首先安装Anaconda 可以安装Python2 7版本或Python3 6版本 百度一下官网 选择对应版本即可 安装成功后 打开Anaconda Prompt 然后依次输入以下命令 python2 conda c
  • 【收藏有用】Python 刚学习就放弃的原因?

    前言 很大一部分小伙伴根本不清楚自己学的知识重点是什么 今天咱们就来整理一下Python自学容易混淆的知识点 Python 2 和 Python 3 的区别 Python 2 和 Python 3 有一些不兼容的语法和库 例如 Python
  • 华农oj数据结构——8580

    8580 合并链表 时间限制 1000MS 代码长度限制 10KB 提交次数 3724 通过次数 2077 题型 编程题 语言 G GCC Description 线性链表的基本操作如下 include
  • Fragment(碎片)一个简易的新闻应用-Android

    先看效果 1 首先 要实现上面的效果 就必须得有两个字段 用来显示新闻的标题和内容 所以新建一个新闻类 News public class News private String title private String content p
  • 求助 pygame 全屏问题!

    import pygame import sys def screen event global screen size key pressed 初始大小 size pygame display list modes 8 screen py
  • ASN.1语法以及在python中如何编码解码

    ASN 1的文章本来是免费的 但是有的人一定要搞小动作 咱惹不起就只能躲着了 做了一些修改后 改为付费文章 应用程序在网络协议的应用层对payload数据 多使用ASN 1标准进行处理 ASN 1 ASN 1 Abstract Syntax
  • TexStudio编译报错“Critical Package xeCJK Error: The xeCJK package requires XeTeX to function. ..._criti”

    1 问题描述 今天在学习博士论文的模板时 出现了一个错误 Critical Package xeCJK Error The xeCJK package requires XeTeX to function criti 我们首先来看看其含义
  • 牛客 密码截取

    include
  • 调研一台电脑连接两个键盘如何区分遇到的问题及解决方法

    1 查找windows API 手册 调用GetRawInputData函数 可以获得按下的键值VKey以及唯一的句柄hDevice 但是hDevice并不能直观的对应不同键盘而且每当拔下键盘 重新插入的时候hDevice会发生变化 2 继
  • Lombok 的 @EqualsAndHashCode(callSuper = false) 的使用

    Lombok的 EqualsAndHashCode
  • 李浩: 再谈 volatile 关键字

    本文内容 volatile关键字的含义 它与barrier 和编译乱序的关系 以及内核里面READ ONCE WRITE ONCE 的实现原理 作者简介 李浩 就职于南京富士通南大软件 熟悉 x86 架构 对内存和文件系统有些研究 最常见的
  • 标准输出,标准错误输出

    标准输出 标准错误输出以及重定向输出 2012 07 24 14 12 46 转载 标签 杂谈 Linux Shell 环境中支持输入输出重定向 用符号 lt 和 gt 来表示 0 1和2分别表示标准输入 标准输出和标准错误信息输出 可以用
  • blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    了解blockchain的概念很简单 区块链 交易链块 它是分布式的 即不是放置在同一台机器上 不同的网络设备上的 数据库支持主办记录日益增长的名单 但是 这也是容易混淆blockchain与我们试图帮他解决了目标 在人们心中的那一刻 这个
  • STM32 DMA 学习笔记(二)

    一 常用DMA库函数 1 DMA初始化 包括通道和参数配置 void DMA Init DMA Channel TypeDef DMAy Channelx DMA InitTypeDef DMA InitStruct 下面就是结构体参数 t
  • 从AT32F403ARCT6替换成MH2103ARPT6,如何在KEIL软件上通过CMSIS DAP下载程序

    从AT32F403ARCT6替换成MH2103ARPT6 如何在KEIL软件上通过CMSIS DAP下载程序 1 点击魔术棒 进入设置 2 点击Device选项卡 选择芯片为ARM ARM Cotex M3 ARMCM3 3 点击Targe
  • vue-cropper(图片裁剪插件)

    描述 vue cropper是一个非常好用的图片裁剪插件 可以拿到裁剪后图片的base64地址或者blob地址 一 安装 npm 安装 npm install vue cropper npm安装或yarn安装 根据喜好2选一即可 yarn
  • java使用easyExcel读写excel

    前言 相信现在很多搞后端的同学大部分做的都是后台管理系统 那么管理系统就肯定免不了 Excel 的导出导入功能 今天我们就来介绍一下 Java 如何实现 Excel 的导入导出功能 Java领域解析 生成Excel比较有名的框架有Apach
  • SpringMVC 中的数据绑定如何使用 @ModelAttribute 注解

    SpringMVC 中的数据绑定如何使用 ModelAttribute 注解 引言 SpringMVC 是一个流行的 Java Web 框架 它具有强大的数据绑定功能 可以将 HTTP 请求参数绑定到控制器方法的参数或对象中 其中 Mode
  • WPF加载大量的图片显示

    一 问题 如何在WPF中加载大批量数据 并且不会阻塞UI线程 尤其是加载大量图片时 二 方案 大致情况是 数据源集合是一个 ObservableCollection
  • Shell脚本的变量

    目录 1 Shell脚本变量简介 2 变量的作用 3 变量的类型 4 自定义变量 4 1自定义变量命名要求 4 2定义与查看变量 4 3赋值时使用的引号 4 4从键盘输入内容为变量赋值 4 5 变量的运算 4 5 1整数变量的运算 4 5