文章目录
1. 变量
1.1 变量的定义
变量就是内存一片区域的地址
1.2 变量的类型
-
局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
-
环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
-
shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
2. shell脚本中变量的定义方法
export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
|
代表[变量名称]中为函数名称 |
|
(变量实际上并未删除,只是不会输出到 后续指令的执行环境中) |
|
列出所有的shell赋予程序的环境变量 |
2.1 环境级别
export 变量=X :传递变量值
(环境关闭后变量失效)
2.2 用户级别
vim ~/.bash_profile
- 写入 export 变量=X
source ~/.bash_profile
2.3 系统级别
系统级别 方法1:
vim /etc/profile
(不建议写在主配置文件)- 写入 export 变量=X
source /etc/profile
系统级别 方法2:
vim /etc/profile.d/XXX.sh
:子配置目录下的自定义脚本中- 写入 export 变量=X
source /etc/profile.d/XXX.sh
2.4 变量名称
建议:短名称用大写字母;长名称用"_"区分子类
- 命名只能使用英文字母,数字和下划线
- 首个字符不能以数字开头
- 中间不能有空格
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
3. 变量的转义
|
转义单个字符 |
|
弱引用,批量转译个数字符 (不能转译\ ` $ !) |
|
强引用 |
4. 变量的声明
花括号{ }
是为了帮助解释器识别变量的边界
a=1
echo $ab
echo ${a}b
5. 变量的数组
数组名=(值1 值2 ... 值n)
${数组名[下标]} #读取数组格式
示例1:
a=(1 2 3 4 5)
${a[0]} 数组第一个元素
${a[-1]} 数组最后一个元素
${a[*]} 所有元素
${a[@]} 所有元素
${a[*]:1:4} 第2-5个元素
${a[@]:1:4} 第2-5个元素
${#a[@]} 元素个数
${#a[*]} 元素个数
示例2:
IP=(`ifconfig ens3 | grep -E "inet\>"`)
echo ${IP} 第一个元素
echo ${IP[1]} 第二个元素
echo ${IP[@]} 所有元素
echo ${#IP[@]} 元素个数
6. 命令的别名设定
1. 临时设定
alias XXX=‘vim’
2. 只针对当前用户生效
vim ~/.bashrc
- 写入alias XXX=‘vim’
source ~/.bashrc
3. 对系统所有用户生效
vim /etc/bashrc
- 写入alias XXX=‘vim’
source /etc/bashrc
4. 删除当前环境中的alias
unalias XXX
7. 用户环境变量
环境变量:用户在操作系统时使用到的命令搜索路径
设定方式1: 当前用户
vim ~/.bash_profile
- 写入export PATH=$PATH:目录
source ~/.bash_profile
设定方式2: 系统所有用户
vim /etc/bash_profile
- export PATH=$PATH:目录
source /etc/bash_profile
8. 利用命令的执行结果设定变量
8.1 直接利用命令执行结果
优先执行:
$(命令)
`命令`
(`
为反引号)
示例:
TEST=`hostname`
TEST=$(hostname)
8.2 脚本中的传参
非交互模式
|
脚本本身 |
|
脚本输入后的第一串字符 |
|
脚本输入后的第2串字符 |
|
脚本输入后的第3串字符 |
|
脚本后输入字符串的个数 |
|
脚本输入的所有字符(一个整体) |
|
脚本输入的所有字符(多个整体) |
|
脚本运行的当前进程ID号 |
|
后台运行的最后一个进程的ID号 |
|
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 |
交互模式
read WESTOS 对WESTOS赋值
read -p "XXXX" 输出提示语
-s 隐藏输出内容
9. 脚本函数
定义:程序的别名
设定方式:
函数名()
{
action1;
action2;
}
函数调用: 函数名
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数… ${10}表示第10个参数
测试:
create_user.sh 判断用户是否存在
- 存在则输出存在
- 不存在则自动创建,并设立密码,最后显示该用户已创建
- 当输入exit时退出程序
#!/bin/bash
Main()
{
read -p "Please input username: " userName
[ -z "$userName" ] && {
Main
}
[ "$userName" = "exit" ] || [ "$userName" = "EXIT" ] && {
echo "bye !"
exit
} || {
User_Create $userName
}
}
User_Create()
{
userName=$1
id $userName &> /dev/null && {
echo "$userName is exist !"
Main
} || {
read -p "Please input $userName password: " -s Passwd
echo ""
useradd $userName
echo $Passwd | passwd --stdin $userName &> /dev/null
echo $userName is created successfully !
Main
}
}
Main