变量的定义:
变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来表示不固定的值的一种方法,保存在内存中
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行是可更改的程序信息
在shell中变量是不能永久保存在系统中的,必须在文件中声明
变量名称的规范:
变量名称中通常包含大小写字母,数字,下划线(不是必须)
变量名称格式:
WESTOS_LINUX
Westos_Linux
westoS_linux
在shell脚本中变量的分类:
在shell中变量分为环境级变量,用户级变量,系统级变量,环境级变量只在当前shell中生效,shell关闭变量丢失,用户级变量写在用户的骨文件中,只针对当前用户有效,系统级变量被写在系统的配置文件/etc/profile中
进程分为父级进程和子进程
1.shell脚本中变量的定义方法
环境级(只在当前shell中生效,shell关闭,变量丢失):
export a=1 #把变量的信息共享
测试:
export a=1
echo $a
重新打开一个shell测试
用户级(写在用户的骨文件中,只针对当前用户生效):
vim ~/.bash_profile
source ~/.bash_profile #重新加载,使更改重新加载到更改用户的配置内存里
测试:
在当前用户可以生效,切换到其他用户不生效
系统级:
vim /etc/profile
export a=1
source /etc/profile
2.字符的转译及变量的声明:
a=1; $a 表示变量
$ #表示取值
`` #表示先执行该命令
\ #表示转义单个字符,\$a 此处的$只表示字符$
'' #强引用,批量转译''中出现的所有字符
"" #弱引用,不能转义!,$,\,`,即该变量扩展和命令扩展在""内仍是起作用的
${} #变量声明
$[] #运算,把shell中可变长字符转化为整型,以用来节省资源
例如:
a=1
echo $ab
echo ${a}b
实验:
a=hello\ world # \表示转译一个空格
echo $a
a="hello world" #用引号批量转译
echo $a
echo $a b
echo ${a}b #${}变量声明
echo $[1+1] #运算1+1
a=(1 2 3) #数组
echo ${a[0]} #调用下标依次显示
echo ${a[1]}
echo ${a[2]}
echo ${name[1]} #依次调用name下标显示文件
echo ${name[2]}
3.变量的传参
$1 #脚本后的第一串字符串
$2 #脚本后的第二串字符串
$3 #脚本后的第三串字符串,以此类推
$# #脚本后所跟的字符串的个数
$* #脚本后的所有字符串,模式为“1 2 3”
$@ #脚本后的第一串字符串,模式为“1”“2”“3”
实验:
vim test.sh
sh test.sh
sh test.sh westos linux
sh test.sh westos linux redhat
区别
@
和
@和
@和*
vim for.sh
sh -x for.sh westos linux redhat #执行三次
vim for.sh
sh -x for.sh westos linux redhat #执行一次
应用:编辑一个脚本,在创建用户之前判断执行脚本时后边跟的文件个数是否符合要求,不符合就报错
vim user_create.sh
sh user_create.sh
sh user_create.sh userpasswd
sh user_create.sh username userpasswd
4.变量的交互式传参
read -s westos #输入不回显,即加密
read -p "input:" westos #交互式输入
实验:编写一个脚本,使得手动输入ip,输出ping的结果
vim test.sh
sh test.sh
应用:编写一个脚本,使得建立用户时,手动输入需要的文件名
vim user_create.sh
sh user_create.sh
sh user_create.sh
5.linux系统中命令别名的设定
alias xie='vim' #临时设定别名
vim ~/.bashrc #编辑环境配置文件,使永久生效
alias xie='vim'
vim /etc/bashrc #编辑系统配置文件,使其他用户生效
alias xie='vim'
unalias xie #撤销命令别名
实验:
alias #查看别名
alias xie=vim #临时设定别名
alias #查看别名设置成功
xie #输入别名直接进入vim中
xie #重新打开一个shell,此设定不生效
vim ~/.bashrc #使永久生效
写入: alias xie='vim'
source ~/.bashrc #编辑环境配置文件
xie #命令生效,但其他用户不生效
测试:
su - student
xie
vim /etc/bashrc #编辑系统配置文件
写入: alias xie='vim'
xie #切换到student用户可以生效
unalias xie #撤销命令别名
######做完实验记得在文件中删除别名设定,恢复环境
6.退出值
$? #命令在执行完成之后产生的退出值,范围是0-255
当$0=0时,表示命令没有错误输出
实验:
echo $?
vim file.sh
写入:
echo hello world
exit 1 #退出值由自己设定
sh file.sh
echo $?
应用:编写一个脚本,用退出值来反映ping不ping的通
vim ip_check.sh
sh ip_check.sh
sh ip_check.sh
7.脚本中的函数
脚本中的函数是把一个复杂的语句块定义成一个字符串的方法
基本形式:
Host_Message()
{
read -p "please input youy action"Action
["Action" == "exit"]&& exit 0
["Action" == "user"]&& echo you are $USER
["Action" == "hostname"]&& echo $HOST
Host_Message
}
实验:
编写一个脚本,使之可以一直建立用户,且以exit退出循环
vim file.sh
sh file.sh
应用:编写一个脚本,使之可以一直建立或删除用户,且以exit退出循环
vim file.sh
sh file.sh
8.基本语句
for 语句
for <条件>
do
执行动作
done
#for语句参数可以传到循环以外,是嵌套关系,总共执行m*n次;for语句的变量仅仅最后变量被使用,循环定义变量依次执行,进行批处理。
举例:
for(NUM in {1..3} = for NUM in `seq 1 3` 或者 for NUM in `seq 1 1 3` ) #1代表步长 `seq 1 3`可以设置步长,可以有变量;{1..5}不可以设置步长。
应用:编写一个脚本,使得找出1-20内打开的主机
vim check_host.sh
sh check_host.sh
编写一个脚本,把所有数据库备份,并保存在文件里边
vim mysql_dump.sh
sh mysql_dump.sh
ls /mnt/mysql_backup/
while语句
while true或者<条件>
do
执行动作
done
实验;
vim test1.sh
sh test1.sh
应用:编写一个脚本,使得检测根目录下的占用情况,如果超过80%,则发邮件给root用户,提示警告
vim warning.sh
sh warning.sh &
mail
编写一个脚本,使得检测根目录下的占用情况,如果超过80%,显示到当前终端
vim file1.sh
sh file1.sh
break exit continue
break #退出脚本
continue #提前结束当前循环,进行下次循环
exit #退出脚本
区别:
vim file2.sh
sh file2.sh
sh file2.sh break
sh file2.sh exit
sh file2.sh continue
应用:写一个脚本,1-10,除了4不输出,其余全输出
vim test.sh
sh test.sh
if 语句
使用格式
if <条件>
then
执行动作
elif
条件
then
执行动作
fi
实验:
vim if.sh
sh if.sh
sh if.sh a
sh if.sh b
应用:编写一个脚本,判断脚本后的文件类型,如果没有输入文件,则报错
vim check_file.sh
另外一种方法(函数)
vim check_file.sh
sh check_file.sh
sh check_file.sh /etc/redhat-release
sh check_file.sh /dev/vdb
编写一个脚本来建立用户,要求如下:
<1>文件数量不对报错
<2>文件不存在报错
<3>文件行数差异报错
<4>当用户存在时显示用户存在,但是不改变用户密码
<5>当用户不存在时建立用户并设定相应密码
vim userfile #编辑用户文件
user1
user2
user3
vim passwdfile #编辑用户密码文件
a111
b222
c333
vim user_create.sh
sh user_create.sh
sh user_create.sh userfile
sh user_create.sh userfile passwdfile
if语句中的条件判断是从上到下顺序依次判断,case语句中的条件判断是同步的·
case的用法(字符匹配):
case语句的一般形式
case num in
条件1) #可以判断多条
命令1
;;
条件2)
命令2
esac
区别case语句与if语句
用if语句编写一个脚本,使得输入dog时输出cat,输入cat时输出dog
vim test
sh test.sh
sh test.sh dog
sh test.sh cat
sh -x test.sh cat
if是从上到下依次匹配,如果主要命令在下边,就会浪费太多时间,用case可以解决
vim test.sh
sh -x test.sh cat
编写一个脚本,使得自动建立和删除文件中的用户
vim user_ctrl.sh
chmod +x user_ctrl.sh
sh user_ctrl.sh
以下脚本存在bug还在努力学习完善中,欢迎来指点,修复bug
编写一个脚本,使得自动建立主分区,并自己输入大小(主分区未满的时候)
vim add1_part.sh
fdisk -l #查看建立的分区
编写一个脚本,使得自动建立扩展分区若(主分区还有位置,则此时就不能建立主分区)
vim add_part.sh
sh add_part.sh
fdisk -l