• Shell-02变量


    变量类型

    本地变量

    VARNAME=VALUE: 作用域为整个bash进程;set 可以省略

    局部变量

    local VARNAME=VALUE:作用域为当前代码段;

    存在变量

    #!bin/bash
    ip=192.168.110.1
    ping -c1 $ip &>/dev/null $$ echo "$ip is up" || echo "$ip is down"
    
    方式一
    #!bin/bash
    ip=192.168.110.1
    if ping -c1 $ip &>/dev/null; then
    	echo "$ip is up"
    else
    	echo "$ip is down"
    fi
    
    方式二   //-eq(等于)  $?(上一个命令的返回值)
    #!bin/bash
    ip=192.168.110.1
    ping -c1 $ip &>/dev/null
    if [ $? -eq 0 ]; then
    	echo "$ip is up"
    else
    	echo "$ip is down"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    输入变量

    #!bin/bash
    #read ip
    #存在提示
    read -p "Please input a ip: " ip
    ping -c1 $ip &>/dev/null
    if [ $? -eq 0 ]; then
    	echo "$ip is up"
    else
    	echo "$ip is down"
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    位置变量

    #!bin/bash
    ping -c1 $1 &>/dev/null
    if [ $? -eq 0 ]; then
    	echo "$1 is up"
    else
    	echo "$1 is down"
    fi
    
    test命令
    ./ping 192.168.110.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    环境变量

    • 自定义变量
      • 只在当前shell生效
        ip1=1.1.1.1
    • 环境变量
      • 在所有shell都生效
      • 定义环境变量
      export ip2=2.2.2.2
      或者
      ip1=1.1.1.1
      export ip1
      
      • 1
      • 2
      • 3
      • 4
    • 取消环境变量
      unset 变量名
    • 添加环境变量
      PATH =$PATH:/new/bin
      export PATH
      
      • 1
      • 2
    • 查看环境变量
      env echo 环境变量 或者env | grep 变量名
    • 引用环境变量
      $变量名 或${变量名}

    位置变量

    $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
    
    • 1

    预定义变量

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

    示例

    撤消变量:unset VARNAME

    查看当shell中变量:set:包括本地变量和环境变量

    查看当前shell中的环境变量:01:printenv 02:env 03:export

    判断用户加参数

    #!bin/bash
    #判断有没有参数
    if [$# -eq 0];then
    	echo "usage:'basename $0' file"
    	exit
    fi
    #判断是不是文件
    if [ ! -f $1 ];then
    	echo "error file!"
    	exit
    fi
    
    for ip in 'cat $1'
    do
    	ping -c1 $ip &>/dev/null
    	if [ $? -eq 0];then
    		echo "$ip is up."
    	else
    		echo "$ip is down."
    	fi
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    变量的赋值方式

    name="kaikai"
    boy ="$name is good"
    
    • 1
    • 2

    从键盘读入
    read 变量名 可以同时多个值
    read -p “提示”
    read -t 5 等待五s

    变量的引用方式

    ''是弱引用,中间是没有变量的
    ""是强应用,但是有特殊含义的符合需要进行转义

    使用命令

    book = `执行命令`
    book = $(执行命令) #括号有时可省略
    
    • 1
    • 2

    变量的运算

    整数运算

    • 方法一
    # expr
    expr 1 + 2
    expr $num1 + $num2
    
    • 1
    • 2
    • 3
    • 方法二
    # $(())
    echo $((1 + 2))
    echo $((num1 + num2))
    
    • 1
    • 2
    • 3
    • 方法三
    #$[]
    echo $[1+2]
    可以直接赋值 sum = $[1+2]
    
    • 1
    • 2
    • 3
    • 方法四
    #let 
    let sum=1+2 echo =$let
    
    • 1
    • 2

    例子:内存的使用

    #!bin/bash
    mem_used=`free -m|grep '^Mem:' | awk '{print $3}'`
    mem_total=`free -m|grep '^Mem:' | awk '{print $2}'`
    mem_percent=$((mem_used*100/mem_total))
    echo "当前内存使用百分比:$mem_percent"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    #例子:多次ping

    #!/bin/bash
    ip= 192.168.110.1
    i=1
    while [ $i -le 5 ]
    do
    	ping -c1 $ip $>/dev/null
    	if [ $? -eq 0 ];then
    		echo "$ip is up.."
    	fi
    		echo "$ip is down"
    	let i++
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    小数计算

     echo "a*4" |bc
     echo "scale=2;6/4" |bc 小数后面保存两位
     awk 'BEGIN{print 1/2}'
     echo "print 5.0/2 " |python
    
    • 1
    • 2
    • 3
    • 4

    变量的删除和替换

    url = www.kaikaiwang.com
    echo ${#url}  获取变量的长度
    echo ${url#www.} 在使用的时候删除www.
    echo ${url#*.} 从前往后,最短匹配
    echo ${url##*.} 从前往后,最长匹配,贪婪匹配
    
    echo ${url%.*} 从后往前删除,最短匹配
    echo ${url%%.*} 从后往前,最长匹配,贪婪匹配
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    切片

    url = www.kaikaiwang.com
    echo ${url:0:5}  www.k
    echo ${url:5:5}  aikai
    echo ${url:5}  aikaiwang.com
    
    • 1
    • 2
    • 3
    • 4

    内容的替换

    url = www.kaikaiwang.com
    echo ${url/kaikaiwang/baidu}    #www.baidu.com
    echo ${url/a/A}   #www.kAikaiwang.com
    echo ${url//a/A} #www.kAikAiwAng.com
    
    • 1
    • 2
    • 3
    • 4

    变量的替换

    变量默认值

    unset var1
    echo ${var1}
    echo ${var1-aaa}
    aaa
    
    • 1
    • 2
    • 3
    • 4
    var2=222
    echo ${var2-aaa}  #存在值的不能被替代
    222
    
    • 1
    • 2
    • 3

    没有值或空值会被替换,有值不会被替代

    var2=
    echo ${var2:-aaa}
    aaa
    
    • 1
    • 2
    • 3

    i++和++i什么区别
    i=1
    let x=i++ 先赋值,再运算
    let y=++i 先运算,再赋值

    示例

    #!/bin/bash
    #判断用户输入的是否是数字
    read -p "请输入一个整值:"num
    
    if [["$num"=~^[0-9]+$]];then
    	echo"你输入的不是数字!"
    	exit
    fi
    
    echo "你使用的数字的:$num"
    
    
    #!/bin/bash
    read -p "请输入一个整值:"num
    while true
    do
    	if [["$num" =~ ^[0-9]+$]];then
    		break
    	else
    		echo "error number"
    		read -p "请重新输入一个整值:"num
    	fi
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    Git 的基本概念和使用方式
    ​极氪,中国传统汽车品牌电动化的样板间
    题目0100-找单词
    知己知彼,验证码对异常机器流量的识别与拦截
    【mongodb】重新整理mongodb中的各种操作
    基于ES6的文章发布系统的设计与实现
    【笔记】离线Ubuntu20.04+mysql 5.7.36 + xtrabackup定时增量备份脚本
    毕业设计选题Java+springboot校园新闻资讯系统源码 开题 lw 调试
    第二十二章 Ajax
    GPT引领前沿热点、AI绘图
  • 原文地址:https://blog.csdn.net/a13554371686/article/details/126802660