1.声明与使用
1.1语法
变量名=值 #注意没有空格
变量没有数据类型
1.2使用变量
${变量名}
如果没有歧义情况{}可以省略
1.3数据类型
理论上bash不支持数据类型,但扩展支持整数类型与数组
语法:
declare -i 变量=值
typeset -i 变量=值
1.4变量的修饰
常量
declare -r 常量名=值
readonly 常量名
declare -r 后不能在下一行赋值
1.5 变量的作用范围与导出变量
1.5.1 代码内的变量作用范围
()与{}的差异
()执行另外建立子shell环境来执行()
{}当前shell环境执行,同一环境
shell环境[变量的作用范围,环境变量,设置选项]
1.env打印系统环境变量
2.set打印当前shell的环境变量与设置
3.set -o打印shell选项设置
4.开启选项
set -o 选项名
5.关闭选项
set +o 选项名
1.5.2 shell脚本与shell脚本之间
a.shell的调用方式
fork的调用 直接调用:建立子进程
exec的调用 加载调用:使用shell替代当前的
source调用 代码包含:等价于c的#include
b.全局永远不要指望访问局部
局部可以访问全局.bash需要额外处理
1.5.3变量的导出
declare -x 变量1 变量2....
export 变量1...
结论:
在系统的配置文件的变量导出使用,必须使用export
set -o allexport开启 全部变量导出
1.6 特殊的变量
1.6.1 环境变量
PATH:执行程序的搜素路径
提示符号支持特殊的转义符号
1.6.2 命令行变量
$0:命令本身
$1....$9:命令行参数
$* $@ :所有命令行参数
$#:命令行参数个数
1.6.3 命令执行状态码
$?
状态码0-255
$$ 进程ID $PID
1.1语法
变量名=值 #注意没有空格
变量没有数据类型
1.2使用变量
${变量名}
如果没有歧义情况{}可以省略
1.3数据类型
理论上bash不支持数据类型,但扩展支持整数类型与数组
语法:
declare -i 变量=值
typeset -i 变量=值
1.4变量的修饰
常量
declare -r 常量名=值
readonly 常量名
declare -r 后不能在下一行赋值
1.5 变量的作用范围与导出变量
1.5.1 代码内的变量作用范围
()与{}的差异
()执行另外建立子shell环境来执行()
{}当前shell环境执行,同一环境
shell环境[变量的作用范围,环境变量,设置选项]
1.env打印系统环境变量
2.set打印当前shell的环境变量与设置
3.set -o打印shell选项设置
4.开启选项
set -o 选项名
5.关闭选项
set +o 选项名
1.5.2 shell脚本与shell脚本之间
a.shell的调用方式
fork的调用 直接调用:建立子进程
exec的调用 加载调用:使用shell替代当前的
source调用 代码包含:等价于c的#include
b.全局永远不要指望访问局部
局部可以访问全局.bash需要额外处理
1.5.3变量的导出
declare -x 变量1 变量2....
export 变量1...
结论:
在系统的配置文件的变量导出使用,必须使用export
set -o allexport开启 全部变量导出
1.6 特殊的变量
1.6.1 环境变量
PATH:执行程序的搜素路径
PS1:命令提示符号
\! 显示该命令的历史记录编号。
\# 显示当前命令的命令编号。
\$ 显示$符作为提示符,如果用户是root的话,则显示#号。
\\ 显示反斜杠。
\d 显示当前日期。
\h 显示主机名。
\n 打印新行。
\nnn 显示nnn的八进制值。
\s 显示当前运行的shell的名字。
\t 显示当前时间。
\u 显示当前用户的用户名。
\W 显示当前工作目录的名字。
\w 显示当前工作目录的路径。
PS1="\t"
PS2:提示符号支持特殊的转义符号
1.6.2 命令行变量
$0:命令本身
$1....$9:命令行参数
$* $@ :所有命令行参数
$#:命令行参数个数
1.6.3 命令执行状态码
$?
状态码0-255
$$ 进程ID $PID