zoukankan      html  css  js  c++  java
  • day02-shell变量

    day02-shell变量
    
    
    1、自定义变量
    [root@db01 ~]# echo $(ifconfig bond0 | grep inet)
    
    定义变量 变量名=xxx 不能数字命名,不能-。
    调用变量 $变量名 ${变量名}
    查看变量 echo $变量名
    取消变量 unset 变量名
    变量作用范围 在当前shell和子shell中生效。
    
    [root@db01 ~]# vim ping.sh 
    #!/bin/bash
    IP=10.0.0.11
    ping -c 3 $IP &>> /dev/null && 
    echo "ip $IP ping successful." || 
    echo "ip $IP ping fail."
    
    [root@db01 ~]# sh ping.sh 
    ip 10.0.0.11 ping successful.
    
    [root@db01 ~]# sh -xv ping.sh 
    #!/bin/bash
    IP=10.0.0.11
    + IP=10.0.0.11
    ping -c 3 $IP &>> /dev/null && 
    echo "ip $IP ping successful." || 
    echo "ip $IP ping fail."
    + ping -c 3 10.0.0.11
    + echo 'ip 10.0.0.11 ping successful.'
    ip 10.0.0.11 ping successful.
    
    
    2、系统环境变量
    范围作用于全局
    [root@db01 ~]# echo $HOME
    /root
    [root@db01 ~]# echo $SHELL
    /bin/bash
    [root@db01 ~]# echo $PS1
    [[033[1;32m]u[033[0m]@[033[1;35m]h[033[0m] [033[1;36m]w[033[0m]]$
    [root@db01 ~]# echo $LANG
    en_US.UTF-8
    
    [root@db01 ~]# vim 1.sh
    #!/bin/bash
    source ./ping.sh
    echo $IP
    
    [root@db01 ~]# sh 1.sh 
    ip 10.0.0.11 ping successful.
    10.0.0.11
    
    [root@db01 ~]# vim ping.sh 
    #!/bin/bash
    IP=10.0.0.11
    ping -c 3 $IP &>> /dev/null
    if [ $? -eq 0 ]; then
            echo "ip $IP ping successful."
    else
            echo "ip $IP ping fail."
    fi
    
    [root@db01 ~]# sh ping.sh 
    ip 10.0.0.11 ping successful.
    
    
    3、位置参数变量
    脚本参传参 $1 $2 $3 ...
    [root@db01 ~]# vim ping.sh 
    #!/bin/bash
    ping -c 3 $1 &>> /dev/null
    if [ $? -eq 0 ]; then
            echo "ip $1 ping successful."
    else
            echo "ip $1 ping fail."
    fi
    
    [root@db01 ~]# sh ping.sh 10.0.0.11
    ip 10.0.0.11 ping successful.
    [root@db01 ~]# sh ping.sh 10.0.0.12
    ip 10.0.0.12 ping fail.
    
    [root@db01 ~]# vim ping.sh 
    #!/bin/bash
    read -p "please input ping network ip: " IP
    ping -c 3 $IP &>> /dev/null
    if [ $? -eq 0 ]; then
            echo "ip $IP ping successful."
    else
            echo "ip $IP ping fail."
    fi
    
    [root@db01 ~]# sh ping.sh 
    please input ping network ip: 10.0.0.11
    ip 10.0.0.11 ping successful.
    [root@db01 ~]# sh ping.sh 
    please input ping network ip: 10.0.0.12
    ip 10.0.0.12 ping fail.
    
    
    4、预定义变量
    $0 脚本名
    $* 所有的参数
    $@ 所有的参数
    $# 参数的个数
    $$ 当前进程的pid
    $! 上一个后台进程的pid
    $? 上一个命令的返回值,0 表示成功。
    例如:
    [root@db01 ~]# vim 1.sh 
    #!/bin/bash
    echo "第 3 个位置参数是: $3"
    echo "第 2 个位置参数是: $2"
    echo "第 1 个位置参数是: $1"
    echo "所有的参数是: $*"
    echo "所有的参数是: $@"
    echo "参数的个数是: $#"
    echo "当前进程的pid是: $$"
    echo '$4'=$4
    echo '$5'=$5
    echo '$6'=$6
    echo '$*'=$*
    echo '$@'=$@
    echo '$#'=$#
    echo '$$'=$$
    echo '$0'=$0
    
    [root@db01 ~]# sh 1.sh 1 2 3 4 5 6 7 8 93 个位置参数是: 32 个位置参数是: 21 个位置参数是: 1
    所有的参数是: 1 2 3 4 5 6 7 8 9
    所有的参数是: 1 2 3 4 5 6 7 8 9
    参数的个数是: 9
    当前进程的pid是: 1855
    $4=4
    $5=5
    $6=6
    $*=1 2 3 4 5 6 7 8 9
    $@=1 2 3 4 5 6 7 8 9
    $#=9
    $$=1855
    $0=1.sh
    
    [root@db01 ~]# sh /root/1.sh3 个位置参数是: 
    第 2 个位置参数是: 
    第 1 个位置参数是: 
    所有的参数是: 
    所有的参数是: 
    参数的个数是: 0
    当前进程的pid是: 1857
    $4=
    $5=
    $6=
    $*=
    $@=
    $#=0
    $$=1857
    $0=/root/1.sh
    [root@db01 ~]# basename /root/1.sh 
    1.sh
    
    
    5、变量赋值的方式
    1、显示赋值:变量名=变量值
    ip=10.0.0.11
    name="zhouwanchun"
    today1=`date +%F`
    today2=$(date +%F)
    2、read 从键盘读入变量值
    read 变量名
    read -p "提示信息: " 变量名
    read -t 5 -p "提示信息: " 变量名
    read -n 2 变量名
    
    [root@db01 ~]# vim backup.sh 
    #!/bin/bash
    backup_dir1=/backup/mysql/mysql3306
    read -p "请输入备份目录: " backup_dir2
    echo $backup_dir1
    echo $backup_dir2
    
    [root@db01 ~]# sh backup.sh 
    请输入备份目录: /backup/mysql/mysql3307
    /backup/mysql/mysql3306
    /backup/mysql/mysql3307
    
    注意事项:定义和引用变量时,""弱引用,''强引用
    "" 会解析变量内容
    '' 不解析,所见即所得
    [root@db01 ~]# echo "!@#$"
    -bash: !@#$: event not found
    [root@db01 ~]# echo '!@#$'
    !@#$
    
    $() `` shell会先被执行。所以命令要用$()或``引起来。
    [root@db01 ~]# echo hostname
    hostname
    [root@db01 ~]# echo $(hostname)
    db01
    
    
    6、变量数值运算
    1、整数运算
    expr + - * / %
    [root@db01 ~]# a=10
    [root@db01 ~]# b=2
    [root@db01 ~]# expr $a + $b
    12
    [root@db01 ~]# expr $a - $b
    8
    [root@db01 ~]# expr $a * $b
    20
    [root@db01 ~]# expr $a / $b
    5
    [root@db01 ~]# expr $a % $b
    0
    
    [root@db01 ~]# echo $((10+2))
    12
    [root@db01 ~]# echo $((10-2))
    8
    [root@db01 ~]# echo $((10*2))
    20
    [root@db01 ~]# echo $((10/2))
    5
    [root@db01 ~]# echo $((10%2))
    0
    
    [root@db01 ~]# echo $[10+2]
    12
    [root@db01 ~]# echo $[10-2]
    8
    [root@db01 ~]# echo $[10*2]
    20
    [root@db01 ~]# echo $[10/2]
    5
    [root@db01 ~]# echo $[10%2]
    0
    
    [root@db01 ~]# let sum=1+2
    [root@db01 ~]# echo $sum
    3
    2、小数运算 bc + - * / %
    [root@db01 ~]# echo 10/3 |bc
    3
    [root@db01 ~]# echo "scale=2;10/3" |bc
    3.33
    [root@db01 ~]# echo "print(10/3)" |python3
    3.3333333333333335
    
    
    7、变量内容替换
    [root@db01 ~]# url=www.mysql.com
    切片 # 代表从前往后切,# 代表匹配第一个,## 贪婪匹配,* 所有内容
    [root@db01 ~]# echo ${url}
    www.mysql.com
    [root@db01 ~]# echo ${url#*.}
    mysql.com
    [root@db01 ~]# echo ${url##*.}
    com
    [root@db01 ~]# echo ${#url}  #长度
    13
    
    切片 % 代表从后往前切
    [root@db01 ~]# echo ${url%.*}
    www.mysql
    [root@db01 ~]# echo ${url%%.*}
    www
    
    索引切片
    [root@db01 ~]# echo ${url:0:3}
    www
    [root@db01 ~]# echo ${url:4}
    mysql.com
    [root@db01 ~]# echo ${url:4:8}
    mysql.co
    [root@db01 ~]# echo ${url:4:9}
    mysql.com
    
    变量内容替换
    [root@db01 ~]# echo ${url/mysql/oracle}
    www.oracle.com
    [root@db01 ~]# echo ${url/w/W}
    Www.mysql.com
    [root@db01 ~]# echo ${url//w/W}
    WWW.mysql.com
    
    
    8、变量替代
    url默认值是www.oracle.com
    unset 取消变量
    [root@db01 ~]# url=www.mysql.com
    [root@db01 ~]# echo ${url}
    www.mysql.com
    变量无值会替代
    [root@db01 ~]# echo ${url-www.oracle.com}
    www.mysql.com
    [root@db01 ~]# unset url
    [root@db01 ~]# echo ${url-www.oracle.com}
    www.oracle.com
    
    变量有值不会被替代
    [root@db01 ~]# url=www.mysql.com
    [root@db01 ~]# echo ${url:-www.baidu.com}
    www.mysql.com
    
    [root@db01 ~]# echo url
    url
    [root@db01 ~]# echo $url
    [root@db01 ~]# echo ${url:-www.baidu.com}
    www.baidu.com
    
    
    9、变量自增
    i++,i-- 先赋值,再运算
    ++i,--i 先运算,再赋值
    
    [root@db01 ~]# vim i++.sh 
    #!/bin/bash
    ip=10.0.0.11
    i=1
    while [ $i -le  5 ];do
            ping -c 1 $ip &>> /dev/null
            if [ $i -eq 5 ];then
                    echo "$ip is up ..."
            fi
            let i++
    done
    
    [root@db01 ~]# sh i++.sh 
    10.0.0.11 is up ...
  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/zhouwanchun/p/13824049.html
Copyright © 2011-2022 走看看