以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
基本介绍
在 Linux 系统中,Shell 是用户与内核之间交互的接口程序,为用户提供使用操作系统的接口,也被称为命令解释器。Shell 接收用户输入的命令,并将其转换为 Linux 系统可以理解的操作,最终通过调用相应的程序来完成这些操作。
<变量名>=<变量值>
# 示例:var=123
等号(=)两边不能有空格,否则会出现 command not found 报错 变量名区分大小写 变量名中只能包含字母、数字、下划线,且不能以数字开头 变量名中避免使用 Shell 关键字,如 if、then、for、do、done、while、case、function 等 变量名中避免使用特殊符号和空格 变量名中尽量使用大写字母表示常量 变量值中如果包含空格,应当使用单引号 '' 或双引号 "" 将变量值括起来,作为字符串使用
变量的数据类型
变量值可以包含字母、数字、特殊符号和空格 变量值可以用单引号 ''、双引号 "" 或不加引号
var=123
或
var='123'
或
var="123"
declare -i var=123
或
let var=123
declare -a var=(1 2 3)
🔔 其中 var[0]=1,var[1]=2,var[2]=3
declare -r var=123
或
readonly var=123
🔔 此时执行 var=aaa,会出现 var: readonly variable 提示
变量的作用类型
1、环境变量
Linux 系统内置的环境变量如下
PATH # 定义了系统搜索可执行文件的目录路径,多个目录通常用冒号 : 分隔
HOME # 用户的主目录
SHELL # 用户当前使用的 Shell 类型
USER # 当前登录用户的用户名
LOGNAME # 当前登录用户的用户名,与 USER 通常相同
HOSTNAME # 系统主机名
LANG # 设置系统的语言和字符编码
LC_ALL # 同时设置语言和区域设置的所有类别
TERM # 定义了终端类型,用于控制终端的外观和行为
PS1 # 定义了命令行提示符的格式
HISTSIZE # 定义了历史命令列表的大小
MAIL # 定义了邮件文件的路径,Shell 会检查这个文件是否有新邮件
PATH_INFO # 在 CGI 脚本中,包含了请求的路径信息
SERVER_NAME # 在 CGI 脚本中,包含了服务器的主机名
SERVER_ROOT # 在 CGI 脚本中,包含了服务器的根目录
PWD # 当前工作目录的完整路径
RANDOM # 每次读取时都会提供一个随机数
SECONDS # 自 Shell 启动以来经过的秒数
SHLVL # 当前 Shell 层级,每启动一个新的 Shell,这个值就会增加
UID # 当前用户的用户 ID
GID # 当前用户的主组 ID
-------------------------------------------------------------
$0:表示当前执行的 Shell 脚本名称
$*:表示所有传递给 Shell 脚本或函数的参数
$@:表示所有传递给 Shell 脚本或函数的参数
$$:当前 Shell 的进程号
$?:表示上一个命令的退出状态
$#:表示当前 Shell 脚本位置参数的个数
🔔 $* 与 $@ 的区别:
1)不加双引号的时候,将传递参数通过空格分隔后进行循环遍历,没有区别
2)加双引号的时候
a)$* 会将传递的参数作为一个字符串变量进行循环遍历
b)$@ 会将传递参数通过空格分隔后作为多个独立变量进行循环遍历
用户也可以通过 export 命令或 declare -x 命令声明自定义的环境变量
export NGINX_HOME="/etc/nginx"
或
declare -x NGINX_HOME="/etc/nginx"
var=123
或在 Shell 脚本的函数中
local var=123
$1:表示传递给 Shell 脚本或函数的第 1 个参数
$2:表示传递给 Shell 脚本或函数的第 2 个参数
...
以此类推
变量的相关操作
# 查看变量值
echo $var
或
echo ${var} # 推荐方式
或
echo "${var}" # 推荐方式,如果包含空格不容易出现异常
# 查看所有变量
env # 查看所有环境变量
或
export # 查看所有环境变量,还可以显示环境变量的定义命令
或
set # 查看所有环境变量和自定义变量
🔔 env、export、set 比较:
# env 命令用于查看环境变量,或在执行命令时临时设置环境变量
# export 命令用于将 Shell 变量设置为环境变量,使其在子进程中可用
# set 命令用于查看和设置 Shell 变量,以及修改 Shell 的行为
可以将一个变量的值赋给另一个变量
var1=123
var2=$var1
可以将 Shell 命令的执行结果赋值给一个变量
var=$(pwd)
${var/old/new}
${var//old/new} # 替换全部匹配的字符串
${var/old}
${var//old} # 删除全部匹配的字符串
${var:=value}
${var:+value}
${var:-value}
${var^}
${var^^}
${var,}
${var,,}
${
${var
${var
${var%样式}
${var%%样式}
🔔 示例
tmp='hostname_192.168.0.1#031a2caf-cf56-44fa-af7a-6a4ab00456b3'
echo ${tmp
echo ${tmp%_*} 结果为:hostname
# 方式一
# 在 ~/.bashrc 或 ~/.bash_profile 中添加
export NGINX_HOME="/etc/nginx"
🔔 仅对当前用户永久有效,需要重新打开 Shell 会话 或 执行 source 命令生效
# 方式二
# 在 /etc/bashrc 或 /etc/profile 或 /etc/environment 中添加
export NGINX_HOME="/etc/nginx"
🔔 对所有用户永久有效,需要重新打开 Shell 会话 或 执行 source 命令生效
书籍推荐