目录
1)定义本身
变量就是内存一片区域的地址

2)变量存在的意义
命令无法操作一直变化的目标:用一串固定的字符来表示不固定的目标可以解决此问题
环境级别
export a=1
在环境关闭后变量失效
用户级别(只针对当前用户生效)
vim ~/.bash_profile //shell环境的配置文件
export a=1
source .bash_profile //使配置文件生效

系统级别
vim /etc/profile //系统级别的传参
export a=2
source /etc/profile
vim /etc/profile.d/westos.sh //自定义自配置文件
export b=3
变量名称
变量名称可包含的字符:字符、_、数字,不能用数字开头
建议变量名称短全用大写字符,变量名称长用_区分子类,如WESTOS、Westos_Linux、westoS_Linux
转译
# // 转译单个字符"" //弱引用,批量转译个数字符 不能转译“\”,“”,“$”,“!”'' //强引用

声明
echo $abecho ${a}b

变量的数组
- a=(1 2 3 4 5)
- a$[a[@]:起始元素id:元素个数]
- echo ${a[0]} //数组中第一个元素
- echo ${a[*]} //数组中所有元素
- echo ${a[@]} //数组中所有元素
- echo ${a[@]:0:3} //数组中1到3个的元素
- echo ${#a[@]} //数组中元素的个数
- unset a[n] //删除数组中的第n-1个元素
- unset a //删除a这个数组

- alias xie='vim' //临时设定
-
- vim ~/.bashrc //只针对于用户生效
- alias xie='vim'
-
- vim /etc/bashrc //针对系统所有用户生效
- alias xie='vim'
-
- unalias xie //删除当前环境中的alias

环境变量:
用户在操作系统时使用到的命令搜索路径
设定方式
- vim ~/.bash_profile
- export PATH=$PATH:/mnt //用户级别
-
- vim /etc/bash_profile
- export PATH=$PATH:/mnt //系统级别
直接利用命令执行结果
- $(),`` //优先执行
- TEST=hostname TEST=$(hostname)

脚本中的传参
- 非交互模式:
- $0 is /mnt/test.sh //脚本本身
- $1 is westos //脚本后所输入的第一串字符
- $2 is linux
- $3 is redhat
- $* is westos linux redhat //脚本后所输入的所有字符"westos linux redhat"
- $@ is westos linux redhat //脚本后所输入的所有字符'westos' 'linux' 'redhat'
- $# is 3 //脚本后所输入的字符串个数
-
- 交互模式传参:
- read WESTOS //对westos赋值
- read -p "please input word:" //输出提示语
- -s //隐藏输入内容


定义:
程序的别名
设定方式:
WORD()
{
action1
action2
}
WORD 在脚本中就代表action1 action2这两个动作
练习脚本
- ACTION()
- {
- read -p "please input username: " USERNAME
- [ "$USERNAME" = "exit" ] && {
- echo exit
- exit
- }
- id "$USERNAME" &> /dev/null && {
- echo "$USERNAME" is exist
- ACTION
- }||{
- echo $USERNAME is not exist
- read -p "please input password: " PASSWORD
- useradd $USERNAME
- echo $PASSWORD | passwd --stdin $USERNAME
- echo $USERNAME is created
- ACTION
- }
-
- }
- ACTION

实现的功能是添加和删除用户。用户可以选择添加或删除,如果选择删除,会要求输入用户名,然后进行删除;如果选择添加,则先检查用户是否已经存在,如果存在则提示用户已经存在,如果不存在,则要求输入密码,然后创建用户并设置密码。
- echo "[d]elete [A]dd"
- read -p "please input action:" ACTION
- [ "$ACTION" != "a" -a "$ACTION" != "d" ] && {
- echo wrong action
- exit
- }
-
- [ "$ACTION" = "d" ] && {
- read -p "please input username:" USERNAME
- id $USERNAME &> /dev/null && {
- userdel -r $USERNAME
- echo $USERNAME is deleted
- }||{
- echo $USERNAME is not exist
- }
- exit
- }
-
- [ "$ACTION" = "a" ] && {
- read -p "please input username:" USERNAME
- id $USERNAME &> /dev/null && {
- echo $USERNAME is exist
- }||{
- read -p "please input password: " PASSWORD
- useradd $USERNAME
- echo $PASSWORD | passwd --stdin $USERNAME
- echo $USERNAME is created
- }
- exit
- }
