Shell (二) 变量的了解

shell 变量

本章节可以掌握内容
变量的类型
变量的定义方式
变量的运算
变量“内容”的删除和替换

一.什么是shell变量

shell 变量? 用一个特定的字符串表示不固定的内容

二、变量的定义:

1.自定义变量
自定义变量:变量名=变量值 变量名必须以字母开头或下划线开头,区分大小写 例
:ip1=114.114.114.114
引用变量:$变量名或 ${变量名}
看着变量:echo $ 变量名 set(所有变量:包括自定义变量和环境变量)
取消变量:仅在当前shell中有效

2.环境变量
自定义环境变量: 方法一 export back_dir=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量:$变量名称 或 ${ 变量名称}
查看环境变量:echo $变量名 env 例如env | grep back_dir2
取消环境变量:unset 变量名
变量作用范围:在当前shell和子shell有效

3.位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
注意:位置变量大于9 需使用${n}表示

4.预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值0表示成功

三、变量的赋值方式:

    1.显示赋值
        变量名=变量值
        实例:
            ip1=1.1.1.1
            school=“BeiJing”
            todat1=`date +%F`
            today2=$(date +%F)
      
    2.read 从键盘读入变量值
        read 变量名
        read -p “提示信息: “变量名
        read -t 5 -P “提示信息:” 变量名       //-t 时间
        read -n 2 变量名                            //-n 字符
        
    实例:
        #vim first.sh
        vach_dir=/var/backup
        read -p “请输入你的备份目录:” back_dir2
        echo $back_dir1
        echo $back_dir2
        #sh first.sh-
        
	#定义或引用变量时注意事项
        “ ”   弱引用
        ‘  ’   强引用
        [root@131 ~]# school=bejijing
        [root@131 ~]# echo "$school is good"
        bejijing is good
        [root@131 ~]# echo '$school is good'
        $school is good

        ` `  命令替换等价于 $( ) ,反引号中的shell命令会先被执行
        touch `date +%F`_file1.txt
        touch $(date +%F)_file2.txt

三、变量的运算

1.整数运算
[root@133 ~]# sum1=100
[root@133 ~]# sum2=200 
            方法一:expr
                expr 1+2 
                expr $num1 + $num2              +  -  \*  /  %:余数
             
             方法二 $(( ))
                echo $(($num1+$num2))          +  -  \*  /  %:余数
                echo $((sum1+sum2))
                echo $(($sum1+$sum2))
                echo $((2**3))                      //2的三次方
                echo $(((5+2)*3))                  //先算括号中的
                sum=$((1+2));echo $sum
                
             方法三 $[  ]
                echo $[5+2]                              +  -  \*  /  %:余数
                echo $[5**2]
             
             方法四 let
                let sum=2+3;echo $sum
                let i++ ;echo $i                        //增加变量值
                
         案例:let i++
          #!/usr/bin/bash
             ip=114.114.114.114
             ip1=192.168.154.133
             i=1                //一次累加
               done
             while [ $i -le 5 ]                         //-le 大于等于5
             do
             ping -c1 $ip &>/dev/null
             if [ $? -eq 0 ];then
             echo "${ip}成功"
             else
             echo "${ip}失败"
                fi
               let i++ 								#循环一次+1 
               done               
    
             
2.小数运算
             echo “2*4” | bc                                //bc  linux系统中的计算器
             echo “2^4” |  bc                               //bc 中^表示次方
             echo “scale=2;6/4” | bc                      
             awk ‘BGGIN{print 1/2}echo “print 5.0/2” | python
             
    **案例 :使用脚本计算出当前内存百分比:**          
      awk 使用
     [root@133 ~]# df -Th
    文件系统                类型      容量  已用  可用 已用% 挂载点
	/dev/mapper/centos-root xfs        50G  7.9G   43G   16% /
	devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
	tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
	tmpfs                   tmpfs     1.9G   13M  1.9G    1% /run
	tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
	/dev/sr0                iso9660   4.3G  4.3G     0  100% /var/ftp/centos
	/dev/sdb1               ext4       99G   25G   69G   27% /kvm
	/dev/mapper/centos-home xfs        46G   39M   46G    1% /home
	/dev/sda1               xfs      1014M  157M  858M   16% /boot
	tmpfs                   tmpfs     378M  4.0K  378M    1% /run/user/0
	[root@133 ~]# df -Th | grep '^/dev/sr0' | awk '{print $3}'                 //grep ‘^’  表示第一列  | awk ‘{print $2}’ 表示第一列第2个数值
	4.3G
	vim disk.sh
    **#!/usr/bin/bash
        mem_used=$(free -m | grep '^Mem' | awk '{print $3}')
        mem_total=$(free -m | grep '^Mem' | awk '{print $2}')
        mem_aa=$((mem_used*100/mem_total))
        echo -e "当前内存使用百分比是:  \e[1;32m$mem_aa%\e[0m"**
        
	[root@133 ~]#./disk.sh     #执行脚本

四、变量“内容”的删除和替换


=====“内容的”删除=========**
	[root@131 ~]# url=www.sina.com.cn
	[root@131 ~]# echo ${#url}              //获取变量值的长度
	15
	[root@131 ~]# echo ${url#*.}            //从前往后最短匹配
	sina.com.cn
	[root@131 ~]# echo ${url##*.}           //从前往后最长匹配
	cn
	[root@131 ~]# echo ${url}                   //标准查看
	www.sina.com.cn
	[root@131 ~]# echo ${rul%%.*}           //从后往前最长匹配
	www
	[root@131 ~]# echo ${url%.*}               //从后往前最短匹配
	www.sina.com
	
	索引切片
	[root@131 ~]# www.sina.com.cn^C                根据数字来选取字符
	[root@131 ~]# 0123456789^
	[root@131 ~]# echo ${url:5:5}
	ina.c
	[root@131 ~]# echo ${url:5}
	ina.com.cn
	[root@131 ~]# echo ${url:0:5}
	www.s
	
	**=======“替换”========**
	[root@131 ~]# echo "$rul"
	www.sina.com.cn
	[root@131 ~]# echo ${url/sina/baidu}        //将sina修改为baidu
	www.baidu.com.cn
	[root@131 ~]# echo ${url/n/N}
	www.siNa.com.cn
	[root@131 ~]# echo ${url//n/N}
	www.siNa.com.cN
	
	**========变量的替代=========**
	[root@131 ~]# var1=123
	[root@131 ~]# echo ${var1-aaa}
	123
	[root@131 ~]# echo ${var2-aaaa}
	aaaa
	[root@131 ~]# var3=
	[root@131 ~]# echo "$var3-aaa"
	-aaa
	[root@131 ~]# ${var3-aaaa}
	
	**${变量名-新的变量值}
	    变量没有被赋值:会使用“新的变量值”替代
	    变量有被赋值(包括空置):将不会替代**
	    
	[root@131 ~]# unset var1
	[root@131 ~]# unset var2
	[root@131 ~]# unset var3
	[root@131 ~]# var2=
	[root@131 ~]# var3=1111
	[root@131 ~]# echo ${var1:-aaaaa}
	aaaaa
	[root@131 ~]# echo ${var2:-aaaaaaa}
	aaaaaaa
	[root@131 ~]# echo ${var3:-aaaaaaa}
	1111
	${变量名-新的变量值}
	    变量没有被赋值(包括空置):都会使用“新的变量值”
	    变量又被赋值:不会被代替
	    
	    
	**i++,++i区别 (了解)**
	[root@131 ~]# i=2
	[root@131 ~]# let i++
	[root@131 ~]# echo $i
	3
	[root@131 ~]# j=2
	[root@131 ~]# let ++j
	[root@131 ~]# echo $j
	3
	[root@131 ~]# unset  i
	[root@131 ~]# unset j
	[root@131 ~]# j=1
	[root@131 ~]# i=1
	[root@131 ~]# let x=i++         //先赋值,后运算
	[root@131 ~]# echo $x
	1
	[root@131 ~]# let y=++j         //先运算,后赋值
	[root@131 ~]# echo $i
	2
	[root@131 ~]# echo $j
	2
	[root@131 ~]# echo $x
	1
	[root@131 ~]# echo $y
	2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值