shell之变量、read命令、命令别名的设定、函数、几种语句

1.变量

 

1).环境级变量

 export a=1           ##声明a=1,相当于把变量放到公共部分让子进程可以读到

 echo $a


 bash

 ps f


 logout

 ssh root@172.25.254.130

 echo $a


 

 

2).用户级变量

 vim .bash_profile

###################

添加    export a=1

 

 source .bash_profile

 echo $a


 exit

 ssh root@172.25.254.130

 echo $a


 

 

3).系统级变量

 vim /etc/profile

###############

添加   export a=1

 

 source /etc/profile

 echo $a


 su - student

 echo $a


 

 

 

2.字符的转译及变量的声明

 

\                    #转译单个字符

""                  #弱引用,批量转译""中出现的字符

''                   #强引用,批量转译''中出现的字符

""与''的区别    在于 ""不能转译 \ ` ! $ 这4个特殊字符

${}                 #变量声明

 

实验:

 a=(1 2 3)

 echo $a

 echo ${a[0]}


 echo ${a[1]}

 echo ${a[2]}


 ls


 name=(`ls`)

 echo $name

 echo ${name[0]}


 echo ${name[1]}

 echo ${name[2]}


 



3.变量值传递

$0                          #脚本名

$1                          #脚本后的第一串字符

$2                          #脚本后的第二串字符

$3                          #脚本后的第三串字符

$#                          #脚本后所跟字符串的个数

$*                           #脚本后所跟的所有字符;模式为 "1 2 3" 即一串字符

$@                         #脚本后所跟的所有字符;模式为"1" "2" "3" 即三串字符

 

 

实验:

 ps             #查看当前进程


 echo $$    #查看当前进程的ip


 vim &       # &打入后台

 echo $$    #进程ip不变


 vim test.sh

##########


 sh test.sh


 sh test.sh westos


 sh test.sh westos linux


 sh test.sh westos linux redhat


 vim file.sh

##########


 sh -x file.sh westos linux redhat    #说明$*表示脚本后边跟的是一串字符

 #echo只执行了1次

 

 vim file.sh

###############


 sh -x file.sh westos linux redhat    #说明$@表示脚本后边跟的是三串字符

#echo只执行了3次



for语句的一般形式:

for  NUM in 1 2 3 或 NUM in {1..3} 或 NUM in `seq 1 3`  #变量NUM从1取到3

do

     想要执行的命令

done

 

 

@@用脚本实现自动建立用户文件userfile中的用户,并指定密码文件passfile中的密码为用户密码

 vim userfile

########

                                                                         

 vim passfile

#########


 

 vim  user_create.sh

#########


注释:

 $# 表示脚本后所跟字符串的个数   -ne 不等于

-e   "\033[31m            \033[0m"             ##设定颜色,前边必须加-e

          红色                 关闭所有属性

wc -l + 文件名             #显示文件内容的行数与文件名   $1 表示脚本后跟的第一串字符

cut -d " " -f 1              #以空格为分隔符,截取第一列  -d 表示指定分隔符 -f 表示指定截取的列

sed -n '2,3p' file          #显示文件中的2,3行

echo 123 | passwd --stdin root       #非交互式更改用户密码


 sh  user_create.sh


 sh  user_create.sh  userfile


 sh  user_create.sh  userfile passfile


 su - westos1

 su - westos2     #登陆成功,密码设定成功



  

5.read 命令(交互式)

##实现变量传递

read  WESTOS       

read -s WESTOS                     # -s 表示对输入内容的加密(即不显示输入的内容)

read -p "input:"  WESTOS       # -p表示显示输出内容,显示""中的内容作为提示语并将输入的内容赋给WESTOS

 

 

实验:

 vim test.sh

########


 

 sh test.sh


 

 

 


@@测试ip是否能ping通

 vim test.sh

#######

                                                           

 sh test.sh


 ping -c1 -w1 ip      #-c1 表示       -w1 表示ping的时间

 

 

@@自动创建用户和密码的改进

 vim user_create.sh

###########


 

注释:

-e               #表示文件是否不存在

awk                ##报告生成器

awk 'BEGIN{n=0}{n++}END{print n}' $USERFILE      #逐行读入用户文件内容,每读入一行就给n加1,即统计用户文件内容的行数

BEGIN{}          #表示处理文本第一行之前需要执行的操作,一般用来初始化操作

{}                   #表示逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令块

END{}           #表示处理文本最后一行以后需要执行的操作,一般用来处理结果

 

 sh user_create.sh


 

 



7.命令别名的设定

 

alias            #设定别名

ualias          #撤销别名

 

实验:

###别名的设定:

 alias xie='vim'        ##临时设定别名

 xie

 alias


 exit

 ssh root@172.25.254.130

 xie

 alias                 #别名消失


 vim .bashrc           ##只对root用户永久生效

########


 

 source .bashrc        #刷新

 xie

 su - student

 xie


 logout

 

 

 vim /etc/bashrc      ##对所有用户永久生效

#########


 

 source /etc/bashrc   #刷新

 su - student

 xie

 logout


 

 

###别名的永久性删除

 vim .bashrc

#########

删除 alias xie='vim'

 

 source .bashrc

 

 vim /etc/bashrc

##########

删除 alias xie='vim'

 

 source /etc/bashrc

 

 alias

  

 unalias  xie    #撤销别名

 alias


 





8.利用命令执行结果设定变量:

 $?  的值 为  0  表示正确

 $?  的值 为 2  表示错误


实验:

 saw

 echo $?


 ls

 echo $?      #0表示正确


 vim westos.sh

###########


     

 sh  westos.sh

 echo $?                 ##exit后边跟的值


 vim westos.sh

############


     

 sh  westos.sh

 echo $?


 

 ls --l

 echo $?     #2表示错误


@@用命令执行结果设定变量的方式检测ip是否能ping通

 

 ping -c1 -w1 172.25.254.130

 echo $?     


 ping -c1 -w1 172.25.254.555

 echo $?


#说明能$?的值为0表示能ping通,$?的值为2表示不能ping通

 

 vim ip_check.sh

#############

 

 sh ip_check.sh


 

 

9.脚本中的函数:

 ##它是把一个复杂的语句定义成一个字符串的方法

优点: 确保命令可循环执行  简化脚本,提高可读性

 

@@循环检测ip是否能ping通

 vim ip_check.sh

############


 

 sh ip_check.sh


 




@@判断文件的类型

 vim file.sh

########


 sh file.sh


 

 

 

 

@@管理用户即循环创建用户或删除用户

 vim user_ctrl.sh

##########


 sh user_ctrl.sh


 

 

 

10.几种常见的语句

 

1)for语句

 

for语句的一般形式:

for  NUM in 1 2 3 (或 NUM in {1..3} 或 NUM in `seq 1 3`)  #变量NUM从1取到3

do

   想要执行的命令

done

 

(2) if语句

if语句的一般形式:

if 条件                ##满足条件则执行命令1,否则执行命令2

then  命令1

elif  命令2

 

##几种常见的退出方式:

 

 exit                     #退出当前脚本

 break                  #退出当前循环

 continue             #提前退出当前循环,进入下一次循环

 

 

实验:

 vim westos.sh

###########


 

 sh westos.sh


 sh westos.sh exit               #退出当前脚本


 sh westos.sh break            #退出当前循环


 sh westos.sh continue       #提前退出当前循环,进入下一次循环


 

##return 不能直接使用!!!

 

 

 

  vim for.sh

########


    

 sh for.sh


 

 vim for.sh

########


 

 sh for.sh


 

 vim for.sh

########


 

 sh for.sh


 

 vim for.sh

########


 

 sh for.sh


 

 vim for.sh

#######


 

 sh for.sh


 

@@for循环的另一种写法

vim for.sh

######


 

 sh for.sh


 

 

@@检测教室里有那些ip是通的即输出所有通着的ip

 vim check_host.sh

#############


 

 

@@备份数据库

准备工作:

 yum install mariadb-server -y

 systemctl start mariadb


 

 mysql -uroot -e "show databases;"          ##用不同的两种方式显示所有数据库


 mysql -uroot -EN -e "show databases;"


 

实验:

mysql -uroot -EN -e "show databases;" | grep -E "^\*|schema$" -v                #过滤掉 以*开头 并且 以schema结尾 的行    \ 表示对*的转译  | 表示与(同时满足两个条件) 

 vim dump_mysql.sh

#############


 sh  dump_mysql.sh


 


 

3)while语句

 

while语句的一般形式:

while ture         #满足条件则执行命令

do

    想要执行的命令

done


实验:

 vim test.sh

#######


 

 sh test.sh


 

vim test.sh

#######


 sh test.sh


 

 

@@检测/目录下的使用情况(如果/的使用量use超过80%则给root用户发邮件报警)


 echo hello world | mail -s warning root    #给root用户发送名为warning的邮件

 mail


 df

 df -H | awk '/\/$/{print $5}' | awk -F "%" '{print $1}'         #过滤出使用量use


 dd if=/dev/zero of=/bigfile bs=1M count=5000             #模拟/使用情况超过80%


 df -H


 

 

vim mail_file.sh

##########


 

 sh file.sh &

 ps


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值