shell脚本之变量的学习,函数以及基本语句的学习与应用

变量的定义:

  变量即在程序运行过程中它的值是允许改变的量
  变量是用一串固定的字符来表示不固定的值的一种方法,保存在内存中
  变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/wzt888_/article/details/80823115