Shell学习之Bash变量详解(二)

 

Shell学习之Bash变量详解

目录

Bash变量

Bash变量注意点

用户自定义变量

环境变量

位置参数变量

预定义变量

 

 

Bash变量

1
2
3
4
用户自定义变量:在Bash中由用户定义的变量。
环境变量:这种变量中主要保存和系统操作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

  

 

Bash变量注意点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是"2name"则是错误的。
 
2.在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
 
3.变量用等号连接值,等号左右两侧不能有空格。
 
4.变量的值如果有空格,需要使用单引号或双引号包括。
 
5.在变量的值中,可以使用"\"转义符。
 
6.如果需要增加变量的值,那么可以进行变量值得叠加。不过变量需要用双引号包含"$变量名"或用${变量名}包含。
 
7.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含。
 
8.环境变量名建议大写,便于区分。

  

用户自定义变量

1
2
3
在用户当前的shell进程中使用
一般在 $HOME/.bash_profile 中定义。
也可以在命令行定义,但只在用户当前shell进程中有意义,如果在shell中启动另一个进程或退出,此值将无效。

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
变量定义:
name="liyi"
 
变量叠加:
name=123
name="$name"456
name=${name}789
 
变量的调用
echo "$name"
echo ${name}
 
变量查看
set
 
变量删除
unset name

  

环境变量

1
2
3
环境变量适用于所有用户进程
/etc/profile中进行定义
在用户进程使用前,必须用export命令导出;建议环境变量都大写。

  

1
2
3
4
5
6
7
8
9
10
11
12
13
设置环境变量
export 变量名=变量值
 
 
查看环境变量取值
echo $var_name
 
查询变量
env
 
删除变量
unset变量名
注:该命令只是从当前用户进程中删除,不会从文件/etc/profile删除

  

 

嵌入shell变量

1
2
3
4
5
一般来讲,BASH有一些预留的环境变量名,这些变量名不能做其他用
途,通常在/etc/profile中建立这些嵌入的环境变量,但这不绝对,取决于用户
 
shell的变量列表:
CDPATH; EXINIT; HOME; IFS; LOGNAME; MAIL; MAILCHECK; PATH; PS1; PS2; SHELL; TERMINFO; TERM; TZ

  


重要环境变量详解

1
2
3
4
5
6
7
8
PATH变量:系统查找命令的目录,当我们在执行命令时,系统会到这些目录去寻找命令,然后执行。
 
假设现在创建一个文件test.sh
chmod 755 test.sh
./test.sh
 
如果你不想这么麻烦,怎么办?
PATH="PATH":/root(后面为存放test.sh的目录)

  

 

 PS1变量

 默认格式:

 

可以定义格式的例子:

1
2
3
4
5
PS1='[\u@\t\w]\$ '
 
PS1='[\u@\@ \h \# \W]\$ '
 
PS1='[\u@\h \W]\$ '

  

总结:

使用命令定义的环境变量在下次重启就不会生效。

定义永久环境变量在/etc/profile文件中定义。

 

 

位置参数变量

我刚开始听到名字的时候,我就想到了python中sys.argv[]的功能,其实位置参数变量和它很相似。

都是接收外部参数,这个参数是用户从外部输入的,第一个$0为程序本身路径,从第二个参数起为用户输入的参数。

 

 

 例子

1
2
3
4
5
#!/bin/bash
echo $0
echo $1
echo $2
echo $3

  

 

 

1
2
3
4
5
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $sum

  

 

 

 

预定义变量

 

 

 

 

 

 

 

 

posted @   -零  阅读(276)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示