1. 定义变量
a):
[root@station mnt]# a=66
[root@station mnt]# echo $a
66
[root@station mnt]# a=33-$a
[root@station mnt]# echo $a
33-66
b):
[root@station mnt]# b='66'
[root@station mnt]# echo $b
66
[root@station mnt]# b='33-$b'
[root@station mnt]# echo $b
33-$b
c):
[root@station mnt]# c="66"
[root@station mnt]# echo $c
66
[root@station mnt]# c="33-$c"
[root@station mnt]# echo $c
33-66
区别:’ '默认不解析其中的内容," "可以定义多个变量,没有特别要求时,字符串都加双引号,需要原样输出加单引号
###定义多个变量时,需要使用" "
[root@station mnt]# a=3 6
bash: 6: command not found...
[root@station mnt]# a=" 3 6"
[root@station mnt]# echo $a
3 6
2. 特殊变量
$0: ###获取脚本文件名,若执行时候包含脚本路径,则输出脚本路径
$n(n>0):###脚本后加参数
$#: ###执行脚本后面参数的个数
$?: ###检测上一条命令结果的返回值,0执行成功,若失败非0
$$: ###获取当前进程号
接收用户输入:read -p "" $i
例:
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
#!/bin/bash
echo $0
[root@station mnt]# /mnt/test.sh
/mnt/test.sh
[root@station mnt]# sh test.sh
test.sh
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
#!/bin/bash
echo $1 $2
[root@station mnt]# sh test.sh 1 2
1 2
[root@station mnt]# echo $#
0
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
echo $1 $2 $3 $4 $5
echo $#
[root@station mnt]# sh test.sh {1..99}
1 2 3 4 5
99
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
#!/bin/bash
systemctl start dhcpd
echo $?
[root@station mnt]# sh test.sh
Failed to issue method call: Unit dhcpd.service failed to load: No such file or directory.
6
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
#!/bin/bash
yum clean all &> /dev/null
yum repolist &> /dev/null
echo $?
[root@station mnt]# sh test.sh
0
[root@station mnt]# ps ax | grep bash
571 ? S 0:00 /bin/bash /usr/sbin/ksmtuned
1758 pts/0 Ss 0:00 -bash
2532 pts/0 R+ 0:00 grep --color=auto bash
[root@station mnt]# echo $$
1758
read -p "提示符" 变量
[root@station mnt]# read str
hello world
[root@station mnt]# echo $str
hello world
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
#!/bin/bash
read -p "Please input a number:" i
echo $i
[root@station mnt]# sh test.sh
Please input a number:2
2
[root@station mnt]# vim test.sh
[root@station mnt]# cat test.sh
#!/bin/bash
CMD=`yum clean all`
echo $CMD
[root@station mnt]# sh test.sh
Loaded plugins: langpacks Cleaning repos: rhel7 Cleaning up everything
练习:打包日志为log_日期.tar.gz /var/log
[root@station mnt]# vim tar.sh
[root@station mnt]# cat tar.sh
#!/bin/bash
tar zcf log_$(date +%F).tar.gz /var/log/
[root@station mnt]# sh tar.sh
tar: Removing leading `/' from member names
[root@station mnt]# ls
log_2018-12-24.tar.gz log.sh tar.sh
变量数值计算
expr ###乘法计算时需要转义
$[] $(()) ###乘法计算无需转义
let ###执行后会保留新的值
bc ###小数计算
expr命令
[root@station mnt]# a=4
[root@station mnt]# expr $a + 2
6
[root@station mnt]# expr $a - 2
2
[root@station mnt]# expr $a \* 2
8
[root@station mnt]# expr $a / 2
2
[root@station mnt]# expr $a % 2
0
####乘法计算时需要转义,否则会出错
[root@station mnt]# expr $a * 2
expr: syntax error
[root@station mnt]# expr $a \* 2
8
####计算时两个参数之间必须加空格
[root@station mnt]# expr $a+2
4+2
[root@station mnt]# expr $a + 2
6
$[] $(())表达式
[root@station mnt]# echo $[a+2]
6
[root@station mnt]# echo $[a-2]
2
[root@station mnt]# echo $[a*2]
8
[root@station mnt]# echo $[a/2]
2
[root@station mnt]# echo $[a%2]
0
[root@station mnt]# echo $((a+2))
6
[root@station mnt]# echo $((a-2))
2
let命令
[root@station mnt]# let a+=10
[root@station mnt]# echo $a
14
[root@station mnt]# let a-=10
[root@station mnt]# echo $a
4
[root@station mnt]# let a-=10
[root@station mnt]# echo $a
4
[root@station mnt]# let a*=10
[root@station mnt]# echo $a
40
[root@station mnt]# let a/=10
[root@station mnt]# echo $a
4
[root@station mnt]# let a%=10
[root@station mnt]# echo $a
4
小数计算bc scale=**; 保留小数点后**位
[root@station mnt]# echo 1.0+2.2 | bc
3.2
[root@station mnt]# echo "scale=2;1.0+2.2" | bc
3.2
[root@station mnt]# echo "scale=2;1.01+2.2" | bc
3.21
练习:键盘输入两个数计算加减乘除
[root@station mnt]# vim add.sh
[root@station mnt]# cat add.sh
#!/bin/bash
read -t 5 -p "input:" a b
echo "a+b=$[a+b]"
echo "a-b=$[a-b]"
echo "a*b=$[a*b]"
echo "a%b=$[a%b]"
[root@station mnt]# sh add.sh
input:1 2
a+b=3
a-b=-1
a*b=2
a%b=1