Shell学习(二)

shell脚本开发之数值计算

把复杂的命令执行过程,通过逻辑代码,组成一个脚本文件,再去执行该文件。

shebang

1
2
3
#!/bin/bash
#!/bin/perl
#!/bin/python

脚本执行方式

1
2
3
4
source 1.sh           # 在当前 shell 执行 sh
. 1.sh # 起新的 shell 执行 sh
bash 1.sh # 同上
./1.sh # 同上

一些常用的变量

1
2
3
echo $UID            # 当前用户的UID
echo $USER # 当前用户名
echo $HOME # 当前用户的家目录

数值计算(只支持整数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 加减乘除
echo $((1+4))
echo $((1-4))
echo $((1*4))
echo $((1/4))
echo $((4/2))
echo $((5%2)) # 取余数
echo $((5**2)) # 取平方

num=2
echo $((num*2)) # 变量计算输出
((num=num*2)) # 变量计算赋值
echo $((num=num*2)) # 变量输出并赋值

echo $((num++))
echo $((++num))
echo $((num--))
echo $((--num))

数值计算

判断用户是否输入为数字

知识点:

  • 函数
  • if 判断
  • 读取变量 read -p
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash

# 判断用户是否输入为数字
print_usage(){
printf "Please enter a int\n"
exit 1
}

read -p "Please input your number:" firstnum

if [ -n "`echo $firstnum|sed 's/[0-9]//g'`" ]
then
print_usage
fi

read -p "Please input your operator:" op

if [ "${op}" != "+" ] && [ "${op}" != "-" ] && [ "${op}" != "*" ] && [ "${op}" != "/" ]
then
echo "Only +|-|*|/"
exit 2
fi

read -p "Please input your second number:" secondnum
if [ -n "`echo $secondnum|sed 's/[0-9]//g'`" ]
then
print_usage
fi

echo $(($firstnum$op$secondnum))

数值计算

let

1
2
3
num=8
# let 计算不用加 $ 符号
let num=num/2 # num=4

expr

expr 必须是传参方式,空格传参,有特殊含义就不行,不太好用

1
2
3
4
5
6
7
8
9
expr 2+4
expr 2 + 4
expr 2 - 4
expr 2 * 4
expr 2 \* 4
expr 2 \/ 4
expr 4 \/ 2
expr 3 % 2
expr length 1234567

expr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 正则匹配
expr match 234.jpg23.png ".*\.png"
expr match 234.jpg23.png ".*\.jpg"

expr 234.jpg23.png ":" ".*\.png"
expr 234.jpg23.png ":" ".*\.jpg"

# substr
expr substr 12345678 4 2
expr substr 12345678 1 2

# index
expr index 12345678abc a
expr index 12345678abc 4
expr index 12345678abc d

expr

bc 计算器

有交互式计算,支持小数计算。开发主要用非交互式的.

1
echo "1.4*1.5" | bc

bc

计算 1 到 100 之和

1
2
3
4
5
echo {1..100} | tr " " "+" | bc
seq -s "+" 100 | bc
echo $((`seq -s "+" 100`))
expr `seq -s " + " 100`
seq -s " + " 100 | xargs expr

awk 计算

awk 也支持小数计算

1
2
echo "1.4 1.6" | awk '{print $1*$2}'
echo "3.2 2.2" | awk '{print $1/$2}'

中括号计算

1
2
echo $[num+2]         # 输出
num=$[num+2] # 赋值

中括号计算

文章作者: Shengyaqingfeng
文章链接: https://creazyboyone.github.io/shell2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shengyaqingfeng's Blog