变量的定义:
变量即在程序运行过程中它的值时允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以储存Script 运行时可更改的程序信息
在shell 中变量是不能永久保存在系统中的,必须在文件中声明
$USER 变量 相对应变化的值
######################
2.
在shell脚本中变量的种类
在shell 中变量分为环境级变量,用户级变量,系统级变量
环境级变量只在当前shell中生效,shell 关闭变量丢失
用户级变量写在用户的骨文件中,只针对当前用户生效
系统级变量被写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有的用户都生效
环境级变量(只在当前环境生效):
在 root 用户下,当前shell 定义a=1
[root@shell mnt]# a=1
[root@shell mnt]# echo $a
1
切换至studnet echo $a 没有任何的输出
另外打开一个新的shell echo $a 也没有任何输出
用户级变量(只对当前用户生效):
vim ~/.bash_profile 编辑用户家目录下的 .bash_profile
例:
vim /root/bash_profile
export westos=1
在超户身份下 echo $westos
切换至 student 用户
系统级(对系统内的用户都能生效)
vim /etc/profile
export redhat=1
在root用户下
sourc /etc/profile 重新加载配置文件
echo $redhat
切换至其他用户
echo $redhat
##################################
3.将脚本变成命令
默认的脚本执行需要 由 命令、参数加脚本文件
echo $PATH 显示当前PATH环境变量,该变量的值由一系列以冒号分隔的目录名组成。
例如:系统中的命令 ls 我们可以直接使用 ls 进行运用,也可以使用 /bin/ls
将脚本变成命令就是用这种方式
vim test.sh
date
编辑一个显示日期的简易脚本进行实验
在修改之前 命令行输入 test.sh
vim /root/.bash_profile
10 PATH=$PATH:$HOME/bin:/mnt
source /root/.bash_profile
test.sh 就可以和命令一样直接运行
###################################
4.字符的转译
\ 转译单个字符
例:
echo * *表示所有
ehco\* *只是一个符号
"" 弱引用,批量转译 "" 中出现的字符,
'' 强引用,批量转译 '' 中出现的字符
'' 与 "" 两者的区别在于, ""弱引用不能转译 "\","`","!","$"
例:
echo "$a" 和 echo '$a'
${} 变量声明
例:
$() 等于`` 表示先执行
$[] 表示运算
#############################
5.变量值的传递
$1 脚本后的第一串字符
$2 脚本后的第一串字符
$# 脚本后字符串的个数
$* 脚本后所有字符串"1 2 3 4 ..."
$@ 脚本后所有字符串"1" "2" "3" "..."
用read 实现变量传递
read -p " " 变量
read -p " " -s 加密变量
脚本示例:编辑脚本userctrl.sh 后面跟参数 -d 的时候需要输入用户名,然后删除该用户,跟参数 -c 的时候需要输入用户名然后创建用户及设定用户的密码,如果没有输入参数或者参数不是-d或者-c会有信息提示。
vim userctl.sh
[ -z "$1" ]&&{
echo -e "\033[35mPlease input -d | -c following userctl.sh\033[0m"
exit
}
[ "$1" != "-d" -a "$1" != "-c" ]&&{
echo -e "\033[35mPlease input -d | -c following userctl.sh\033[0m"
exit
}
[ "$1" = "-d" ]&&{
read -p "Please input username: " USER
echo ""
userdel -r $USER &> /dev/null ||{
echo -e "\033[35mCan't del becsuse $USER is not exist or busy!!!\033[0m"
}
}
[ "$1" = "-c" ]&&{
read -p "Please input username: " USER
read -p "Please input password: " -s PAS
echo ""
useradd $USER &> /dev/null &&{
echo $PAS | passwd --stdin $USER &> /dev/null
}||{
echo -e "\033[35m$USER is exist!!!\033[0m"
}
}
检验脚本
#######################################
6.设置系统命令别名
环境级: alias kan=‘cat’ cat的别名为kan
用户级: vim .bashrc
系统级: vim /etc/bashrc
取消命令别名: unalias kan
例:在环境级中进行命令别名试验
设置别名之前
设置环境级别名后
离开当前环境,打开一个新的shell后别名不会生效
设置用户级别名,只有当前用户可用
设置系统级别名,所有用户所有环境都能用
############################
7.退出值exit
exit = 0 上一命令执行正确
exit != 0 上一命令执行错误
$? 是命令在执行完成之后产生的退出值,范围是【0-255】
################################
8.函数
脚本中的函数是把一个复杂的语句块定义成一个字符串的方法。
函数字符串()
{
语句块
函数字符串
}
函数字符串
例:
脚本示例:
编辑一个脚本,运行脚本输入用户名即可创建用户,并且可以指定用户密码,除了输入 exit 输入其他任何内容都不能退出
vim create_user.shHAHA()
{
read -p "Please input username : " USERNAME
[ "$USERNAME" = "exit" ]&&{
echo bye
exit 0
}
useradd $USERNAME &> /dev/null &&{
read -p "Please input password : " -s PASSWD
echo ""
echo $PASSWD | passwd --stdin $USERNAME &> /dev/null
HAHA
}||{
echo $USERNAME is already exist
HAHA
}
}
HAHA
实验效果: