什么是变量(变量的定义)
即在程序运行过程中它的值是允许改变的 变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息
在shell中变量是不能永久保存在系统中的,必须在文件中声明
在shell脚本中变量的种类
在shell中变量分为环境级变量,用户级变量,系统级变量
环境级变量 | 只在当前shell中生效,shell关闭变量丢失,数据被系统回收 |
---|---|
用户级变量 | 写在用户的骨文件中,只针对当前用户生效 |
系统级变量 | 被写在系统的配置文件/etc/profile或者/etc/profile.d/ 中,对于所有用户都生效 |
shell脚本中变量的定义方法
环境级
export A=1 ##不能仅仅给A赋值 需要声明它在整个shell环境中A=1
用户级
vim ~/.bash_profile ##在用户的骨文件中 编辑声明
export A=1
source ~/.bash_profile
系统级
vim /etc/profile ##在系统的配置文件中 编辑声明
export A=1
source /etc/profile
查看用户家目录下内容
.bashrc 是用户的shell环境变量
.bash_profile 用户变量
用户的shell环境变量可以直接在当前shell中进行声明 也可以在.bashrc文件中写入声明
环境级变量
在当前shell环境先声明A的数值 su - 切换用户之后回加载的是该用户的shell环境 环境发生变化
用户级变量
vim ~/.bash_profile ##在用户的骨文件中 编辑声明
export westos=1
系统级变量
vim /etc/profile ##在系统的配置文件中 编辑声明
export westos=2
切换用户 该系统级变量依旧生效
bash打开了一个新的shell
env查看系统中的变量
su 与 su - 的区别
su - 切换了用户身份 shell 以及该环境中的变量
su 只是切换了用户身份 没有切换当前的shell环境 以及环境当中的变量
变量名称的规范
变量不能以符号开头,通常包含字母,数字,下划线(不是必须)
变量名称格式
WESTOS_LINUX
Westos_Linux
westoS_Linux
字符的转译及变量的声明
字符 | 作用 |
---|---|
\ | 转译单个字符 |
" " | 弱引用,批量转译""中出现的字符 |
’ ’ 强引用 | 批量转译’'中出现的字符 |
’ '与" " | 两者的区别在于,弱引用不能转译 \, ` , ! , $ |
${ } | 变量声明 |
转译单个字符
强弱引用
变量声明
变量值传递
字符 | 作用 |
---|---|
$0 | 脚本的名称 |
$1 | 脚本后的第一串字符串 |
$2 | 脚本后的第二串字符串 |
$3 | 脚本后的第三串字符串 |
$# | 脚本后所跟字符串的个数 |
$* | 脚本后跟的所有字符串,模式为“ 1 2 3 ” |
&@ | 脚本后跟的所有字符串,模式为“1”“2”“3” |
$$ | 进程的pid |
用read实现变量传递
read -p "xxxx: " -s WESTOS ##-s隐藏输入的内容
read -p "xxxx: " WESTOS
Linux系统中命令别名的设定
ls其实也是系统中的一个别名
alias xie='vim'
环境级别名
alias xie='vim'
用户级别名
vim ~/.bashrc
alias xie='vim'
source ~/.bashrc
系统级别名
vim /etc/bashrc
alias xie='vim'
source /etc/bashrc
unalias xie 取消别名(先在文件中删除,然后在shell中运行该命令)
环境级
执行xie命令之后出现的
用户级
切换用户之后不生效了
系统级
切换用户之后依旧生效
取消别名
变量的引用
两种方式
$( ) 适用于shell中perl语句不识别
` ` 适用范围更广
vim west.pl
命令执行结束后的退出值$?
当一个进程执行完毕时,该进程会调用一个名为_exit的例程来通知内核它已经做好"消亡"的准备了。该进程会提供一个退出码(一个整数)表明它准备退出的原因。
我们执行echo $?时返回的值就是进程的退出码,而且,这个退出码是由刚刚执行完的进程提供给系统内核的。
$?
$?是命令在执行完成之后产生的退出值
范围是[0-255]
当$?=0时标示命令执行没有错误输出
这个值可以用exit 命令设定.
例如 exit 66
执行命令之后
脚本中的函数
脚本中的函数是把一个复杂的语句块定义为一个字符串的方法,然后每次想使用某个功能的时候,直接调用函数。
通过使用函数可以提高程序的可读性和重用性,避免重复编写相同的代码
我们来写一个脚本演示
要求:在执行脚本user.sh时,输入用户名,如果该用户不存在建立并设定密码,如果该用户存在,要继续输入用户名,如果输入exit退出
#!/bin/bash
USER ()
{
read -p "please input username:" WORD
[ "$WORD" = "exit" ]&&{
echo Bye
exit 0
}
useradd $WORD &> /dev/null && {
read -p "please input passwd:" -s PASSWD
echo $PASSWD | passwd --stdin $WORD &> /dev/null
echo ""
echo "This user alreadly set!"
} || {
echo "$WORD is exit"
}
USER
}
USER
验证: