Linux之shell脚本学习(二)——变量
一、shell脚本中变量的定义
(1)变量即在程序运行过程中它的值是允许改变的量。
(2)变量是用一串固定的字符来标示不固定的值的一种方法。
(3)变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息。
(5)在 shell 中变量是不能永久保存在系统中的,必须在文件中声明。
二、变量的种类
1、环境变量
环境级变量只在当前 shell 中生效, shell 关闭变量丢失
定义方法:
export A=1 ##直接在命令提示符后面输入
2、用户级变量
用户级变量写在用户的骨文件中,只针对当前用户生效
定义方法:
用户变量 可以在用户家目录的.bash_file 文件中定义
vim ~/.bash_profile
export A=1
source ~/.bash_profile ##使变量生效
3、系统级变量
系统变量 可以在/etc/profile或者在/etc/profile.d/的以.sh结尾的文件中定义,也可以自己新建一个文件,将系统变量写在文件里
定义方法:
vim /etc/profile
export A=5
source /etc/profile
vim /etc/profile.d/test.sh
export A=6
source /etc/profile.d/test.sh
三、变量名称的规范
(1)变量名称中通常包含大小写字母,数字,下划线(不是必须)
(2)变量名称格式
示例:
WESTOS_LINUX
Westos_Linux
westoS_Linux
四、字符的转译及变量的声明**
1、转义
\ ##转译单个字符
"" ##弱引用,批量转译 "" 中出现的字符
'' ##强引用,批量转译 '' 中出现的字符
注意:
'' 与 "" 两者的区别在于, "" 不能转译 "\","`","!","$"
2、变量的声明
例如:
${}
五、变量值传递
$1 脚本后的第一串字符串
$2 脚本后的第一串字符串
$3 脚本后的第三串字符串
$# 脚本后所跟字符串的个数
$* 脚本后跟的所有字符串,模式为“ 1 2 3 ”
&@ 脚本后跟的所有字符串,模式为“1” “2” “3”
$*与[email protected]的差别
[[email protected] mnt]# vim test1.sh
[[email protected] mnt]# cat test1.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
for i in "[email protected]"
do
echo $i
done
[[email protected] mnt]# sh test1.sh 1 2 5
1 2 5
1
2
5
分析:
[email protected] $* 只在被双引号包起来的时候才会有差异
双引号括起来的情况:
$*将所有的参数认为是一个字段
[email protected]将所有的参数视为每一个字段,分别执行操作
用 read 实现变量传递
• read redhat ##执行脚本时将键入的字符赋给redhat变量
• read -s redhat1 ##执行脚本时将键入的字符赋给redhat1变量,不同的是键入时是不回显的
• read -p "input: " redhat2 ##执行脚本时,显示提示语,键入字符给redhat2变量
六、linux 系统中命令别名的设定
alias zhao='vim'
vim ~/.bashrc ##命令设置别名,只对.bashrc文件所在家目录的所有者生效
alias zhao='vim'
source ~/.bashrc
vim /etc/bashrc ##命令设置别名,对系统中的所有用户生效
alias zhao='vim'
unalias zhao ##取消别名zhao
source /etc/bashrc
七、利用命令执行结果设定变量
示例:
vim test.sh
DATE=$(date)
echo $DATE
sh test.sh
注意:
Hostname=$(hostname)
Hostname=`hostname`
这两种的表示方式都可以
$?
$? 是命令在执行完成之后产生的退出值,范围是 [0-255]
当 $?=0 时标示命令执行没有错误输出,这个值可以用 exit 命令执行 .
八、脚本中的函数
脚本中的函数时把一个复杂的语句块定义成一个字符串的方法
示例:
#!/bin/bash
USER_CREATE()
{
read -p "Please input you create username: " user_name
id $user_name &> /dev/null && {
echo This user is exist!!!
exit
} || {
useradd $user_name &> /dev/null
echo $user_name is create!!!
}
}
USER_CREATE
read -p "Please input $user_name is password: " passwd
echo $passwd | passwd $user_name --stdin &>/dev/null && {
echo $user_name's passwd set successfully!!!
}