首页 > 系统相关 >SHELL之变量

SHELL之变量

时间:2024-08-20 09:04:49浏览次数:7  
标签:00 SHELL 变量 用户 echo 变量名 bash

一、脚本
1、shell组成

#!脚本声明(使用哪种解释器)
#  注释信息
脚本内容

注意: 如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用:

#!/bin/env 解释器 
#!/bin/env bash

2、执行脚本方式

sh  -x  脚本文件路径
source  脚本文件路径
.       脚本文件绝对路径

二、变量
1、什么是变量

  • 变量:内存空间,命名的内存空间
  • 内存:编址的存储单元
  • 进程:程序执行起来成为进程,进程的数据存储在内存当中,进程执行过程中需要临时存储数据需要变量。
eg:
1、计算机计算1+100
在内存中分出100个空间存储100个整数,让运算器挨个取它加起来。
2、计算机计算1+100万
对一个内存空间设为变量,它会一直变化。

2、引用变量值

$变量名

3、查看变量名

echo $变量名
echo ${变量名}

4、取消变量名

unset 变量名

5、变量的类型
按存储类型:决定数据存储的格式和长度。

  • 整数型
  • 浮点型
  • 字符型
  • 双精度浮点型

按使用类型:

  • 环境变量:变量名通常都大小写,由系统维护,用来设置工作环境,只有个别变量用户可以直接更改
  • 位置变量:bash内置,存储执行脚本时提供的参数
  • 预定义变量:bash内置,一类有特殊用途的变量,可直接调用,但不能直接赋值或修改
  • 自定义变量(本地变量):由用户自主设置、修改及使用

三、变量详解

1、环境变量
1)按生效的范围分类。

  • 系统环境变量:公共的,对全部的用户都生效。
  • 用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

2)按生存周期分类。

  • 永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
  • 临时环境变量:使用时在Shell中临时定义,退出Shell后失效。

永久生效:

配置文件:/etc/profile、 ~/.bash_profile

相关操作:

env:列出当前用户所有的环境变量
set:列出当前用户所有变量
export:变量名=变量值 或者 变量名=变量值;export 变量名

常见的环境变量:

PWD、PATH、USER、LOGNAME、UID、SHELL、HOME、PS1、PS2、…

# AAA=NIHAO
# env | grep AAA
# export AAA
# env | grep AAA
AAA=NIHAO

2、系统变量
系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用。

内置变量 含义
$? 上一条命令执行后返回的状态;状态值为0表示执行正常,非0表示执行异常或错误
$0 当前执行的程序或脚本名 (./02.sh)
$# 脚本后面接的参数的个数 3个
$* 脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开 (参数数组a b c)
$@ 脚本后面所有参数,参数是独立的,也是全部输出 (参数数组a b c)
$1~$9 脚本后面的位置参数,$1表示第1个位置参数,依次类推
${10}~$ 位置变量,第10个位置变量必须用{}大括号括起来(2位数字以上扩起来)
$$ 当前所在进程的进程号,如echo $$
$! 后台运行的最后一个进程号 测试: sleep 400 &(后台运行)/sleep 400(ctrl+z 暂停运行), 再运行jobs, 查看当前进程的后台子进程.
!$ 调用最后一条命令历史中的参数
# cat variable.sh
#!/bin/bash
echo "列出脚本系统变量"
echo "\$0 = $0"    # "\" 是转译的意思,是字符串
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$3 = $3"
echo "\$10 = ${10}"

3、自定义变量
当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

[root@scp1 ~]# A=hello
[root@scp1 ~]# ps
  PID TTY          TIME CMD
78656 pts/0    00:00:00 bash
78793 pts/0    00:00:00 ps
[root@scp1 ~]# echo $A
hello
[root@scp1 ~]# su user1
[user1@scp1 root]$ ps
  PID TTY          TIME CMD
78885 pts/0    00:00:00 bash
78917 pts/0    00:00:00 ps
[user1@scp1 root]$ echo $A

4、全局变量
全局变量:全局所有的用户和程序都能调用(文件配置),且继承,新建的用户也默认能调用。
解读相关配置文件

文件名 说明 备注
$HOME/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等 $HOME:用户的家目录
$HOME/.bash_profile 当前用户的环境变量,用户登录时读取
$HOME/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等
/etc/bashrc 全局的bash信息,所有用户都生效
/etc/profile 全局环境变量信息 系统和所有用户都生效
$HOME/.bash_history 用户的历史命令 history -w 保存历史记录 history -c 清空历史记录

说明:以上文件修改后,都需要重新source让其生效或者退出重新登录。

用户登录系统后, 读取相关文件的顺序

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • /etc/bashrc
  • $HOME/.bash_logout

四、变量值及范围控制

1、三种定界符

注意:$()与 等效,但$()更方便嵌套使用

2、变量的作用范围

局部变量:

  • 新定义的变量默认只在当前shell环境中有效
  • 无法在子shell环境中使用

全局变量:

  • 全局变量在当前shell及子shell环境中均有效
  • 使用export可将局部变量声明为全局变量
  • export 局部变量名 :为局部变量添加全局属性
  • export -n 全局变量名 : 取消指定变量的全局属性

五、交互式定义变量

read 标准输入取值(用户自己输入变量值)

目的:read从键盘读入变量值完成赋值
语法:read 选项 变量名

选项 释义
-p 提示用户的信息
-n 限制变量值的长度
-s 不显示用户输入的内容
-t 限制用户输入变量值的超时时间

六、定义变量的类型
declare 选项 变量名=变量值

选项 释义 举例
-i 将变量看成整数 declare -i A=123
-r 定义只读变量 declare -r B=HELLO
-a 定义普通数组
-A 定义关联数组
-x 将变量通过环境导出 declare -x C=666 export C=666

扩展:只读变量

[root@scp1 ~]# name=libai
[root@scp1 ~]# echo $name
libai
[root@scp1 ~]# readonly name
[root@scp1 ~]# echo $name
libai
[root@scp1 ~]# name=lili
-bash: name: 只读变量

标签:00,SHELL,变量,用户,echo,变量名,bash
From: https://www.cnblogs.com/OpenSourceSite/p/18367760

相关文章

  • 【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结
    目录【数据结构与算法第一章】编程基础1.1变量与数据类型1.2指针1.3结构体1.4数组和链表1.5程序结构1.6函数中参数的传递1.7C语言中运算符的含义【数据结构与算法第一章】编程基础1.1变量与数据类型变量:    ①在C语言中,所有变量必须先声明后使用......
  • PowerShell 脚本是什么?
     目录前言什么是PowerShell?PowerShell的历史PowerShell脚本的定义PowerShell的基本语法1.命令和Cmdlet2.变量3.控制结构4.函数5.模块PowerShell脚本的应用场景1.系统管理2.数据处理3.网络管理4.自动化测试5.云计算PowerShell脚本的编写与......
  • c语言中用%lf输出double型和float型变量
     001、 测试%lf输出double型和int型变量的差异 [root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试c程序#include<stdio.h>intmain(void){doublei;/*声明doble型和float型变量*/floatj;......
  • 第二周,linux基础_vim、grep、sed、shell
    总结学过的权限,属性及ACL相关命令及选项,示例。结合vim几种模式,学会使用vim几个常见操作。1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。3)打开文件......
  • 变量
    变量变量就是可以变化的量Java是一种强类型语言,每个变量都必须声明其类型Java变量是程序中最基本的储存单元,其要素包括变量名,变量类型和作用域/***@version:javaversion1.8*@Author:MrTheroux*@description:*@date:2024-08-1910:09*/publicclassDem......
  • 2024年新SCI顶刊算法蛇鹭优化算法SBOA优化Transformer-LSTM模型的多变量时间序列预测
    matlabR2024a以上一、数据集二、2024年新SCI顶刊算法蛇鹭优化算法SBOA2024年,YFu受到自然界中鹭鹰生存行为启发,提出了鹭鹰优化算法(SecretaryBirdOptimizationAlgorithm,SBOA)。2.1算法思想SBOA生存需要不断地寻找猎物和躲避捕食者的追捕,探索阶段模拟鹭鹰捕食蛇,而......
  • 易优global全局配置变量标签-EyouCms手册
    【基础用法】名称:global功能:获取系统全局配置变量内容语法:{eyou:globalname='web_title'/}或者{$eyou.global.web_title}文件:系统模板引擎参数:name=''变量名底层字段:请查阅网站后台的【设置】-【基本信息】web_status关闭网站web_name网站名称web_logo网站LO......
  • 易优assign模板文件中定义变量标签-EyouCms手册
    【基础用法】名称:assign功能:模板文件中定义变量,可在其他标签里使用该变量语法:{eyou:assignname='typeid'value='5'/}文件:无参数:name=''变量名value=''赋给变量名的值底层字段:无【更多示例】-------------------------------示例1------------------------------......
  • Linux, shell编程备份数据库详解,带你读懂命令行指令
    目录先看最终代码再解释[!-d"${BACKUP}/${DATETIME}"]解析mysqldump-u${DB_USER}-p${DB_PW}--host=${HOST}-q-R--databases${DATABASE}|gzip>${BACKUP}/${DATETIME}/$DATETIME.sql.gz解析 tar-zcvf$DATETIME.tar.gz${DATETIME}解析先看最终代码再解......
  • C# 变量作用域
    1局部变量在方法、循环、条件语句等代码块内声明的变量是局部变量,它们只在声明它们的代码块中可见。方法//函数下面的定义对于类属于局部变量实例//错误使用变量作用域for(inti=0;i<n;i++){intsum=0;//现在的sum是局部变量sum+=i;Consol......