变量的定义
变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息
在shell中变量是不能永久保存在系统中的,必须在文件中声明
在shell脚本中变量的种类
在shell中变量分为环境级变量,用户级变量,系统级变量
环境级变量只在当前shell中生效,shell关闭变量丢失
用户级变量写在用户的骨文件中,只针对当前用户生效
系统级变量被写在系统的配置文件/etc/profile或者/etc/profile.d/ 中,对于所有用户都生效
shell脚本中变量的定义方法
环境级
export A=1
用户级
vim ~/bash_profile
export A=1
系统级
vim /etc/profile
export A=1
环境级只在当前环境生效
用户级针对设定用户生效,其他用户不生效
全局变量对所有用户和环境都生效
在用户家目录下
ls -a
.bash.rc 是用户的shell环境变量
.bah_profile 用户变量
在.bashrc文件中写入
export a=1
直观查看 su 和su - 的区别
上图分析:
在用户的shell环境变量加入 a=1
输出a可以输出
Su student 切换到student用户
可以输出a,因为su切换是无交互的切换方式,只改变了用户身份,但没有改变环境,此时他的环境还是root的shell环境
Su - 不仅切换用户也切换环境,因为student的用户环境没有a的值
变量名称的规范
变量名称中通常包含大小写字字母,数字,下划线(不是必须)
变量名称格式
WESTOS_LINUX
Westos_Linux
westoS_Linux
字符的转译及变量的声明
字符 | 作用 |
---|---|
\ | 转译单个字符 |
" " | 弱引用,批量转译""中出现的字符, |
’ ’ | 强引用,批量转译’'中出现的字符 |
’ '与" " | 两者的区别在于,"“不能转译”","`","!","$" |
${} | 变量声明 |
例如:
A=1
echo $Ab
echo ${A}b
变量值传递
字符 | 作用 |
---|---|
$0 | 脚本的名称 |
$1 | 脚本后的第一串字符串 |
$2 | 脚本后的第二串字符串 |
$3 | 脚本后的第三串字符串 |
$# | 脚本后所跟字符串的哥数 |
$* | 脚本后跟的所有字符串,模式为“ 1 2 3 ” |
&@ | 脚本后跟的所有字符串,模式为“1”“2”“3” |
$$ | 进程的pid |
实验展示
写一个脚本,如下图
可以看出
$的作用
用read实现变量传递
read WESTOS
read -s WESTOS
read -p "input: " WESTOS
参数 -s 不回显输入
为了结果更直观,加入一个空行
linux系统中命令别名的设定
alias xie='vim'
vim ~/.bashrc 编辑用户级别名
alias xie='vim'
vim /etc/bashrc 全局别名
alias xie='vim'
unalias xie 取消别名(先在文件中删除)
变量的引用
两种方式
$() 适用于shell中
` ` 适用范围更广
写一个perl脚本(暂不用管这个脚本,只是演示两个的区别)
利用命令执行结果设定变量
Hostname=$(hostname)
Hostname=`hostname`
$?
$?是命令在执行完成之后产生的退出值
范围是[0-255]
当$0=0时标示命令执行没有错误输出
这个值可以用exit 命令执行.
例如 exit 66
脚本中的函数
脚本中的函数时把一个复杂的语句块定义成一个字符串的方法
Host_Message()
{
read -p "Please input you action: " Action
[ "Action" == "exit" ] && exit 0
[ "Action" == "user"]&&echo You are $USER
[ "Action" == "hostname" ]&& echo $HOST
Host_Message
}
Host_Message