变量类别
类别 | 作用范围 |
---|---|
环境变量 | 当前及及所有子进程 |
本地变量 | 仅存在于当前进程中 |
局部变量 | 脚本代码块中有效 |
位置变量 | 类似于分组当中的\n 取分组信息,$n
{
n
∥
n
∈
N
+
}
\{n \|n\in N^+\}
{n∥n∈N+} |
特殊变量 | $! , $@ |
环境变量
环境变量 | 说明 |
---|---|
PATH | 命令搜索路径 |
HOME | 默认登录显示目录 |
HISTSIZE | 命令缓冲大小 |
LOGNAME | 登录名 |
HOSTNAME | 主机名 |
SHELL | 当前使用的shell |
LANG/LANGUGE | 语言设置 |
MAIL | 邮件存放地址 |
PS1 | 命令基本提示符 root用户是 # ,对于普通用户是$ |
PS2 | 附属提示符,默认是> |
PWD | 当前目录 |
OLDPWD | 上一个目录 |
cd -
# 返回上一次目录 cd - # 返回上一次目录 cd $OLDPWD
PS
提示符 说明 \d
日期 \H
完整主机名 \h
主机名,第一个单词 \t
时间,24小时 HH:MM:SS
\T
时间,12小时 HH:MM:SS
\A
时间,24小时
HH:MM
\u
当前用户名 \v
bash
版本信息\w
完整的工作目录名称 \W
工作目录名称,最后一个文件夹 \#
下达的第几个命令 \$
提示字符
颜色 前景色 F
背景色 B
黑 30 40 红 31 41 绿 32 42 黄 33 43 蓝 34 44 紫红 35 45 青蓝 36 46 白 37 47 设置模式 :
\[\e[F;Bm\]...\[\e[0m\]
。# 自定义提示 PS1="[\u@\h \W]\$ " # 上色 PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "
- 操作
命令 操作 env
打印环境变量 printenv
打印环境变量 export
设置环境变量 unset
删除环境变量 source
或.
加载新的环境变量 export
打印环境变量 命令设置仅当前
shell
有效,想设置不丢失,可以编辑~/.bashrc
文件。修改之后通过
source
进行加载生效。配置文件加载逻辑参考这个。
特殊变量
特殊变量 | 说明 |
---|---|
$$ | 进程ID |
$0 | 脚本文件名 |
$n
{
n
∥
n
∈
N
+
}
\{n \|n\in N^+\}
{n∥n∈N+} | 传入参数引用 |
$# | 传递参数个数 |
$* | 传递的所有参数 |
$@ | 传递的所有参数 |
$? | 上个命令返回状态码 |
变量操作
表达式 | 类型 | 说明 |
---|---|---|
name=value | 本地变量 | 直接赋值 当前进程有效 |
export name | 环境变量 | 把本地变量升级为环境变量 |
export name=value | 环境变量 | 直接指定并设置环境变量 |
local name | 局部变量 | 脚本局部变量声明 |
local name=value | 局部变量 | 脚本局部变量声明并赋值 |
set name=value | 本地变量 | 同name=value |
unset name | 各种变量 | 撤销指定命令 各种变量有效 |
declare -x name=value | 环境变量 | 设置环境变量 |
变量引用
引用方式 | 说明 |
---|---|
$name | 直接引用 |
${name} | 直接引用${name}r 避免$namer 变量名识别错误 |
"$name" | 双引号,弱引用 可引用变量名的值 |
'${name}' | 单引号,强引用 相当于转义,不可引用变量值 |
linux
中变量默认都是字符串类型A=1 B=2 echo $A+$B # 1+2
脚本初始
格式
要点 | 含义 |
---|---|
#! | 指定编译器(必定第一行) |
# | 注释行 |
#!/usr/bin/bash
# print path
echo `pwd`
如果不知道
bash
改用哪一个,which bash
就搞定。一般情况下都是
/bin/bash
,不过which bash
就是你使用的shell
罢了。
执行
- 一般执行
- 权限
chmod a+x godme
- 执行
# 相对路径 ./godme # 绝对路径 /home/godme/godme
直接指定到文件就会自动执行
- 其他执行办法
- 环境变量
PATH=$PATH:/home/godme godme
指定
PATH
,自动扫描当前目录作为命令目录,直接运行命令即可。
sh
sh godme bash godme
这个最特殊,文件没有执行权限也可以,如果脚本正确的话。
因为此时的
godme
只是作为参数,而不是自己执行,不需要执行权限。