shell基础—变量定义及数值计算

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

例:

  1. $0:
[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
  1. $n:
[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
  1. $#:
[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
  1. $?:
[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
  1. $$:
[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
  1. read 使用方法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
  1. 将命令执行结果赋值
[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

你可能感兴趣的:(shell基础—变量定义及数值计算)