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 ...
原文地址:https://www.cnblogs.com/zhouwanchun/p/13824049.html