基于Linux下的变量的设定及脚本函数的使用

1,变量的定义:
变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息
在 shell 中变量是不能永久保存在系统中的,必须在文件中声明
父进程结束,子进程由初始化程序进行管理 ptree
僵尸进程:无程序管理的进程
bash 开启一个新的shell

试验:
westos=1
vim westos.sh
echo $westos
sh westos.sh
结果为空

这里写图片描述
这里写图片描述
这里写图片描述

用户集变量(后加载,所以重新开启shell,用户集变量显示)vim .bash_profile
系统集变量/etc/profile
source /etc/profile刷新配置
环境变量
PATH=$PATH:/mnt 执行脚本时系统默认读取目录添加/mnt
echo $PATH 
\单个转义=‘’    ‘’引用所有字符
“”批量特殊字符不能被引用 ! `` $ \ 

$() `` 拓展型的拓展接口 7版本linux无区别
${}声明变量a=1
echo ${a}b
$[]将可变长字符变成整型数 可变长字符,节省系统资源
课后调查

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

2.变量值传递
3 1脚本后的第一串字符串
2 #脚本后所跟字符串的个数
, 1 2 3 @脚本后跟的所有字符串,模式为“ 1”“2”“3”

试验验证:
vim wn.sh
#!/bin/bash
echo \$0 is $0
echo \$1 is $1
echo \$2 is $2
echo \$3 is $3
echo \$# is $#
echo \$* is $*
echo \$@ is $@

这里写图片描述

read实现变量传递
read    westos  
read -s  westos 加密输出
read -p "input: westos 显示交互式字符

应用脚本1

交互式ping地址,并给出结果
vim test.sh
 #!/bin/bash
read -p "please input a number: " -s IP -S 表示加密
ping -c1 -w1 $IP &> /dev/null && echo $IP is up || $IP is down
测试:
sh test.sh

这里写图片描述
这里写图片描述

~

3.linux中别名的设定

alias 查看系统别名
alias xie='vim'
xie 出现vim界面(临时的)
vim .bashrc
alias xie='vim' 本机别名配置文件
source .bashrc
验证xie,student用户不可以执行
vim /etc/bashrc
alias xie ='vim'
su - student
xie可以执行
删除配置文件中别名设定
unalias xie
别名删除,

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

4、退出值的比较
? 退 [ 0 255 ] 0=0 时标示命令执行没有错误输出
这个值可以用 exit 命令执行

例如 exit 66
vim ip.sh
#!/bin/bash
read -p "please input a idaddress : " IP
ping c1 w1 $IP &> /dev/null
[ "$?" -eq "0" ] && echo $IP is up || echo $IP is down

这里写图片描述
这里写图片描述

.
5.函数调用
作用:
简化脚本内容,使其可读性更高
使其循环执行

example1: 检查是否可以ping通
vim ip.sh
#!/bin/bash
PING(){
 read -p "please input a ipaddress : " IP
 [ "$IP" == "exit" ] && {
  echo bye
  exit 0
}
   ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
   PING
}
PING

这里写图片描述
这里写图片描述

example2 查看文件类型 ||
vim file_check.sh

#!/bin/bash
FILE_CHECK(){
   [ "$1" "$2" ] && {
     echo $2 is $3
     exit 0
}
}
[ -e "$1" ] ||{
      echo $1 is not exist!!
      exit 0
}
FILE_CHECK -L $1 link
FILE_CHECK -f $1 file

测试:
sh file_check.sh /dev/vdb

这里写图片描述
这里写图片描述

break 结束单次循环,只中端脚本的循环,脚本之外的命令可以执行
exit 结束所有循环,包括循环外的命令
continue 提前结束本次循环,进入下一个循环
seq 设定步长,变量

脚本4 监控根容量是否超过,如果超过指定值则发送报警邮件给管理员

echo helo world | mail -s warning root  将内容为helloworld的标题为warning发给root用户
vim check_DISK.sh
#!/bin/bash
USE=`df -h | awk -F " " '/\/$/{print $5}' | awk -F "%" '{print $1}'`
TTY=`ps | awk '/bash$/{print $2}'`
while true
do
[ "$USE" -ge "10" ]&&{
     echo "your / will full!!" > /dev/$TTY 将邮件发送给当前
}
      sleep 3
done
测试:sh check_DISK.sh &

这里写图片描述
这里写图片描述

脚本5:数据库的定点备份

yum install mariadb-server.x86-64
vim database.sh
#!/bin/bash
DATABASE_MESSAGE=`mysql -uroot -EN -e "show databases;"|grep -E "^\*|schema$" -v`
mkdir -p /mnt/mysql_dump
for DATABASE_NAME in $DATABASE_MESSAGE

do
       mysqldump -uroot $DATABASE_NAME >/mnt/mysql_dump/${DATABASE_NAME}.sql
       [ "$?" -eq "0" ] {
        echo -e "$DATABASE_NAME IS BACKUPED!!"
done

这里写图片描述
这里写图片描述

脚本6:创建用户交互式,输入指令执行相应操作

vim user_ctrl.sh
ACTION_ADD(){
   [ "$1" = add ]&&{
   read -p "please input a username: " USERNAME
   useradd $USERNAME
   read -p "please input a password: " PASSWORD
   echo $PASSWORD|passwd --stdin $USERNAME
}
}
ACTION_DEL(){
   [ "$1" = del ]&&{
   read -p "please input a username: " USERNAME
   userdel -r $USERNAME
}
}
USER_CTRL(){
    read -p "please input action: " ACTION
    [ "$ACTION" = exit ] &&{
    echo bye
    exit 0
}

    ACTION_ADD $ACTION
    ACTION_DEL $ACTION
    USER_CTRL
}

 sh user_ctrl.sh  

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/ningyuxuan123/article/details/80767250
今日推荐