变量类型
数据存储格式、存储空间大小、参与运算各类
强类型:定义时必须指定类型、参与运算必须符合类型要求
弱类型:无须指定类型,默认均为字符型;参与运算会自动隐式类型转换,变量可未定义调用时为空
bash为弱类型
bash中的变量种类
根据变量生效范围
本地变量:生效范围为当前shell进程,对子shell父shell均无效
pstree:查看进程树,可查是否有子shell
环境变量:生效范围为当前shell及子shell进程
局部变量:生效范围为当前shell进程中某代码片断(函数)
位置变量:$1,$2...来表示,用于脚本调用脚本执行时所加的参数,例:./1.sh 参数1 参数2,脚本中用$1,$2调用
特殊变量:bash内置变量,$?,$0(表示命令本身),$*,$@,$#
set:显示系统中所有变量
unset name:取消变量
本地变量
赋值:name='value'
value:
直接字符串
变量引用:name="$name"
引用命令执行结果:name=`command`或name=$(command)
引用:${name},{}可取消,当变量后面字符可以为变量名时需要{}
"":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,保持为字符串
环境变量
赋值:export name=value
declare -x name=value
export name:把以有本地变量赋值为环境变量
显示所有环境变量
export、env、printenv
bash常用内建环境变量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1
位置变量
$*:调用脚本的所有参数,当为一个字符串
$@:调用脚本的所有参数,当为N个字符串
$#:值为脚本参数的个数
shift [n]:脚本中shift为一行表示删除第一个参数,shift n删除前n个参数
变量命名法则
不能使用程序中的保留字,例:if,for
只能使用数字、字母及下划线,且不能以数字开头
尽量不使用全大写字母、下划线开头
见名知义
只读变量
readonly name:设置变量只读,不可改值,不可取消
declare -r name:设置变量只读,不可改值,不可取消
bash的配置文件
全局配置
/etc/profile:为交互式登录shell提供配置
/etc/profile.d/*.sh:profile文件的补充
/etc/bashrc:为非交互式登录shell提供配置
profile和bashrc非和交互式可能会互相用一些公用配置
个人配置
~/.bash_profile
~/.bashrc
shell登录
交互式登录
直接通过终端输入账号密码登录
使用su - username切换的用户
先读取/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc,重复的后面定义的命令生效
非交互式登录
su username切换的用户
图形界面下打开的终端
执行脚本
先读取~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh
profile、profile.d/、.bashprofile三个文件作用:
用于定义环境变量
登录后运行命令或脚本
bashrc、.bashrc作用
定义命令别名
定义本地变量
登录后运行命令或脚本
bash中的算术运算
+,-,*,/,%(取余),**
实现算术运算
let 变量=算术表达式:let sum=3+4
变量=$[算术表达式]:sum=$[3+4]
变量=$((算术表达式)):sum=$((3+4))
变量=$(expr 数 符号 数 ...):sum=$(expr 3 \* 4),*需要转义
bash内建随机数生成器
$RANDOM:1-32767,例:$[$RANDOM%100+1]生成1-100的随机数
增强型赋值
+=,-=,*=,/=,%=
let sum+=1或let sum++:sum加1
let sum-=1或let sum--:sum减1
条件测试
test 表达式
[ 表达式 ]
[[ 表达式 ]]
bash测试类型
数值测试表达式
-gt:是否大于,[ 1 -gt 3 ]
-ge:是否大于等于
-eq:是否等于
-ne:是否不等于
-lt:是否小于
-le:是否小于等于
字符串测试表达式
==或=:是否等于,[ a = b ]
>:是否大于
<:是否小于
!=:是否不等于
=~:左侧字符是否能被右侧PATTERN匹配,必须用于[[]]中
-z "变量":是否为空
-n "变量":是否为不空
字符串比较最好有引号
文件测试
bash自定义退出状态码
exit 数:自定义退出状态码
注意:脚本中一但遇到exit命令,脚本会立即终止,退出码为exit参数
数据存储格式、存储空间大小、参与运算各类
强类型:定义时必须指定类型、参与运算必须符合类型要求
弱类型:无须指定类型,默认均为字符型;参与运算会自动隐式类型转换,变量可未定义调用时为空
bash为弱类型
bash中的变量种类
根据变量生效范围
本地变量:生效范围为当前shell进程,对子shell父shell均无效
pstree:查看进程树,可查是否有子shell
环境变量:生效范围为当前shell及子shell进程
局部变量:生效范围为当前shell进程中某代码片断(函数)
位置变量:$1,$2...来表示,用于脚本调用脚本执行时所加的参数,例:./1.sh 参数1 参数2,脚本中用$1,$2调用
特殊变量:bash内置变量,$?,$0(表示命令本身),$*,$@,$#
set:显示系统中所有变量
unset name:取消变量
本地变量
赋值:name='value'
value:
直接字符串
变量引用:name="$name"
引用命令执行结果:name=`command`或name=$(command)
引用:${name},{}可取消,当变量后面字符可以为变量名时需要{}
"":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,保持为字符串
环境变量
赋值:export name=value
declare -x name=value
export name:把以有本地变量赋值为环境变量
显示所有环境变量
export、env、printenv
bash常用内建环境变量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1
位置变量
$*:调用脚本的所有参数,当为一个字符串
$@:调用脚本的所有参数,当为N个字符串
$#:值为脚本参数的个数
shift [n]:脚本中shift为一行表示删除第一个参数,shift n删除前n个参数
变量命名法则
不能使用程序中的保留字,例:if,for
只能使用数字、字母及下划线,且不能以数字开头
尽量不使用全大写字母、下划线开头
见名知义
只读变量
readonly name:设置变量只读,不可改值,不可取消
declare -r name:设置变量只读,不可改值,不可取消
bash的配置文件
全局配置
/etc/profile:为交互式登录shell提供配置
/etc/profile.d/*.sh:profile文件的补充
/etc/bashrc:为非交互式登录shell提供配置
profile和bashrc非和交互式可能会互相用一些公用配置
个人配置
~/.bash_profile
~/.bashrc
shell登录
交互式登录
直接通过终端输入账号密码登录
使用su - username切换的用户
先读取/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc,重复的后面定义的命令生效
非交互式登录
su username切换的用户
图形界面下打开的终端
执行脚本
先读取~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh
profile、profile.d/、.bashprofile三个文件作用:
用于定义环境变量
登录后运行命令或脚本
bashrc、.bashrc作用
定义命令别名
定义本地变量
登录后运行命令或脚本
bash中的算术运算
+,-,*,/,%(取余),**
实现算术运算
let 变量=算术表达式:let sum=3+4
变量=$[算术表达式]:sum=$[3+4]
变量=$((算术表达式)):sum=$((3+4))
变量=$(expr 数 符号 数 ...):sum=$(expr 3 \* 4),*需要转义
bash内建随机数生成器
$RANDOM:1-32767,例:$[$RANDOM%100+1]生成1-100的随机数
增强型赋值
+=,-=,*=,/=,%=
let sum+=1或let sum++:sum加1
let sum-=1或let sum--:sum减1
条件测试
test 表达式
[ 表达式 ]
[[ 表达式 ]]
bash测试类型
数值测试表达式
-gt:是否大于,[ 1 -gt 3 ]
-ge:是否大于等于
-eq:是否等于
-ne:是否不等于
-lt:是否小于
-le:是否小于等于
字符串测试表达式
==或=:是否等于,[ a = b ]
>:是否大于
<:是否小于
!=:是否不等于
=~:左侧字符是否能被右侧PATTERN匹配,必须用于[[]]中
-z "变量":是否为空
-n "变量":是否为不空
字符串比较最好有引号
文件测试
bash自定义退出状态码
exit 数:自定义退出状态码
注意:脚本中一但遇到exit命令,脚本会立即终止,退出码为exit参数