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 ...
  • 相关阅读:
    Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
    Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
    Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
    Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
    Mysql学习总结(2)——Mysql超详细Window安装教程
    Mysql学习总结(2)——Mysql超详细Window安装教程
    Html学习总结(1)——理解Html的head
    Html学习总结(1)——理解Html的head
    「Python 编程」编码实现网络请求库中的 URL 解析器
    目不识丁的我使用Python编写汉字注音小工具
  • 原文地址:https://www.cnblogs.com/zhouwanchun/p/13824049.html
Copyright © 2011-2022 走看看