[内容] Linux 数值计算

内容一:数值计算符号

1) + ,加法
2) – ,减法
3) * ,乘法
4) / ,除法
5) % ,求余

内容二:数值计算的方法

2.1 方法一:使用 expr 命令

# a=1
# b=2
# c=`expr $a + $b`
# echo $c
3

或者:

# a=1
# b=2
# c=$(expr $a + $b)
# echo $c
3

或者:

# a=1
# b=2
# c=$[`expr $a + $b`]
# echo $c
3

(补充:这里以 1 加 2 等于 3 为例)

2.2 方法二:使用 let 命令

# a=1
# b=2
# let c=b/c
# echo $c
2

(补充:这里以 2 除以 1 等于 2 为例)

2.3 方法三:使用双括号 (())

# a=1
# b=2
# c=$(($a * $b))
# echo $c
2

(补充:这里以 1 乘以 2 等于 2 为例)

[内容] Linux while 循环

案例一:无限循环

#!/bin/bash

while ((1));
do
        sleep 1
        echo "infinite loop"
done

或者:

#!/bin/bash

while :
do
        sleep 1
        echo "infinite loop"
done

案例二:从 1 计数到 5

#!/bin/bash

i=1;n=5
while ((i <= n))
do

        echo $i
        let i++

done

或者:

#!/bin/bash

i=1;n=5
while [[ $i -le $n ]]
do

        echo $i
        let i++

done

案例三:从 1 加到 5

#!/bin/bash

i=1
while ((i <= 5));
do

        let sum=$sum+$i
        let i++

done

echo $sum

或者:

#!/bin/bash

i=1
while [[ $i -le 5 ]];
do

        let sum=$sum+$i
        let i++

done

echo $sum

案例四:输入多个数字,通过同时按下 “Ctrl” 键和 “D” 键结束输入,并将多个数字相加

#!/bin/bash

sum=0
echo "Please input number, press "ctrl" and "d" at the same time to end the input"

while read num
do
        let sum=$sum+$num
done

echo $sum

案例五:阅读文件

#!/bin/bash

while read line
do
        echo $line

done < test.txt

或者:

#!/bin/bash

cat test.txt | {
while read line
do
        echo $line

done }

或者:

#!/bin/bash

cat test.txt | while read line
do
        echo $line

done

(补充:这里以阅读 test.txt 文件为例)

[命令] Linux 命令 eval (执行变量里的命令或实现指针)

内容一:eval 命令的作用

对将要执行的命令进行 2 次扫描,第 1 次扫描时把扫描的内容替换成命令,第 2 次扫描时执行扫描到的命令

内容二:eval 直接执行命令的案例

2.1 设置变量

# url=eternalcenter.com

(补充:这里以将内容 eternalcenter.com 赋值给变量 url 为例)

2.2 显示变量里内容

# echo $url
eternalcenter.com

或者:

# eval echo $url
eternalcenter.com

(补充:这里以显示变量 url 里的内容 eternalcenter.com 为例)

内容三:eval 将变量转换成命令后执行的案例

3.1 将命令设置成变量

# command=pwd

(补充:这里以将命令 pwd 赋值给变量 command 为例)

3.2 显示变量里的命令

# echo $command
pwd

(补充:这里以显示变量 command 里的 pwd 命令为例)

3.3 执行变量里的命令

# eval $command
/root

(补充:这里以执行变量 command 里的 pwd 命令为例)

内容四:eval 显示脚本里最后 1 个位置变量的内容

4.1 创建显示最后 1 个位置变量的脚本

# vim test.sh

创建以下内容:

#!/bin/bash
eval echo \$$#

(补充:这里创建名为 test.sh 的脚本为例)

4.2 带位置变量执行脚本

# . test.txt a b c d e
e

(补充:这里执行名为 test.sh 的脚本并附带 a b c d e 5 个位置变量为例)

内容五:eval 实现指针

5.1 设置变量

# url=eternalcenter.com

(补充:这里以将内容 eternalcenter.com 赋值给变量 url 为例)

5.2 设置指针

# pointer=url

(补充:这里以让指针 pointer 指向 url 变量为例)

5.3 显示指针指向的变量

# echo $pointer
url

(补充:这里以显示指针 pointer 指向的变量 url 为例)

5.4 显示指针最终指向的内容

# eval echo \$$pointer
eternalcenter.com

(补充:这里以显示指针 pointer 指向的最终内容 eternalcenter.com 为例)

[命令] Linux 命令 {} (设置字符串默认值、截取字符串、替换字符串里的内容)

内容一:设置字符串默认值

1.1 当要替换的变量未定义或为空时则给予其 1 个默认值

# value=
# newvalue=${value:-eternalcenter}
# echo $newvalue
eternalcenter
# value=mingyuzhu
# newvalue=${value:-eternalcenter}
# echo $newvalue
mingyuzhu

或者:

# value=
# newvalue=${value:=eternalcenter}
# echo $newvalue
eternalcenter
# value=mingyuzhu
# newvalue=${value:=eternalcenter}
# echo $newvalue
mingyuzhu

(补充:这里以当变量 value 存在且为空时则变量 newvalue 的值为 eternalcenter 为例)

1.2 当要替换的变量已定义且不为空时则给予其 1 个默认值

# value=
# newvalue=${value:+eternalcenter}
# echo $newvalue
# value=mingyuzhu
# newvalue=${value:+eternalcenter}
# echo $newvalue
eternalcenter

(补充:这里以当变量 value 存在且不为空时则变量 newvalue 的值为 eternalcenter 为例)

内容二:截取变量某一部分内容 (以字符在字符串的位置作为参照)

2.1 截取从第某个位置字符开始的所有内容

2.1.1 截取字符串中从左数第某个字符开始到左边的所有内容 (包含此字符本身)
# str=eternalcenter.com
# echo ${str::2}
et

或者:

# str=eternalcenter.com
# echo ${str:0:2}
et

或者:

# str=eternalcenter.com
# echo ${str:offset:2}
et

(补充:这里以截取字符串中从左数第 2 个字符和左边的所有内容为例)

2.1.2 截取字符串中从右数第某个字符开始到左边的所有内容 (不包含此字符本身)
# str=eternalcenter.com
echo ${str::0-2}
eternalcenter.c

(补充:这里以截取字符串中从右数第 2 个字符开始左边的所有内容为例)

2.1.3 截取字符串中从右数第某个字符开始到右边的所有内容 (包含此字符本身)
# str=eternalcenter.com
# echo ${str:0-2}
om

(补充: 截取字符串中从除右数第 2 个字符开始到右边的所有内容)

2.2 截取从第某个位置字符开始几个位置的字符的内容

2.2.1 截取字符串中从左数第某个字符开始几个字符的内容 (不包含此字符本身)
# str=eternalcenter.com
# echo ${str:5:4}
alce

(补充:这里以截取字符串中从左数第 5 个字符开始 4 个字符的内容为例)

(注意:在此情况下是从第 0 字符开始数第 1 个字符的,而不是从第 1 个字符开始数第 1 个字符)

2.2.2 截取字符串中从右数第某个字符开始几个字符的内容 (包含此字符本身)
# str=eternalcenter.com
# echo ${str:0-5:4}
r.co

(补充:这里以截取字符串中从右数第 5 个字符开始右边 4 个字符的内容为例)

(注意:在此情况下是从第 0 字符开始数第 1 个字符的,而不是从第 1 个字符开始数第 1 个字符)

2.3 截取从第某个位置字符到第某个位置字符的内容

2.3.1 截取字符串中从左数第某个字符到从右数第某个字符中的所有内容 (不包含这些字符本身)
# str=eternalcenter.com
# echo ${str:1:-4}
ternalcenter

(补充:这里以截取字符串中从左数第 1 个字符到右数第 4 个字符中的所有内容为例)

(注意:在此情况下是从第 0 字符开始数第 1 个字符的,而不是从第 1 个字符开始数第 1 个字符)

2.3.2 截取字符串中从右数第某个字符到从右数第某个字符中的所有内容 (不包含这些字符本身)
# str=eternalcenter.com
# echo ${str:0-5:0-1}
r.co

或者:

# str=eternalcenter.com
# echo ${str:0-5:-1}
r.co

(补充:这里以截取字符串中从右数第 1 个字符到从右数第 4 个字符中的所有内容为例)

(注意:在此情况下是从第 0 字符开始数第 1 个字符的,而不是从第 1 个字符开始数第 1 个字符)

2.4 截取字符串中除从左数第某个字符外的所有内容

# str=eternalcenter.com
# echo ${str:2}
ernalcenter.com

(补充:截取字符串中从除左数第 2 个字符开始到右边的所有内容)

内容三:截取变量某一部分内容 (以字符作为参照)

3.1 截取变量前一部分内容 (去尾)

3.1.1 截取变量右数第 1 个某个字符到左边的所有内容 (去尾) (不包含此字符本身)
# value=ming:yu:zhu
# newvalue=${value%:*}
# echo $newvalue
ming:yu

(补充:这里以截取变量 value 右数第 1 个冒号 “:” 左边的所有值并赋予给变量 newvalue 为例)

3.1.2 截取变量右数最后某个字符到左边的所有内容 (最大限度去尾) (不包含此字符本身)
# value=ming:yu:zhu
# newvalue=${value%%:*}
# echo $newvalue
ming

(补充:这里以截取变量 value 右数最后 1 个冒号 “:” 左边的所有并赋予给变量 newvalue 内容为例)

3.1.3 截取变量右数最后某几个字符到左边的所有内容 (使用变量) (去尾) (不包含此字符本身)
# value=mingyuzhu
# novalue=zhu
# newvalue=${value%%$novalue}
# echo $newvalue
mingyu

(补充:这里以截取变量 value 右数最后 1 个 zhu 左边的所有内容并赋予给变量 newvalue 为例)

3.2 截取变量后一部分内容 (掐头)

3.1 截取变量左数第 1 个某个字符到右边的所有内容 (掐头) (不包含此字符本身)
# value=ming:yu:zhu
# newvalue=${value#*:}
# echo $newvalue
yu:zhu

(补充:这里以截取变量 value 左数第 1 个冒号 “:” 右边的所有内容并赋予给变量 newvalue 为例)

3.2 截取变量左数最后某个字符到右边的所有内容 (最大限度掐头) (不包含此字符本身)
# value=ming:yu:zhu
# newvalue=${value##*:}
# echo $newvalue
zhu

(补充:这里以截取变量 value 左数最后 1 个冒号 “:” 右边的所有内容并赋予给变量 newvalue 为例)

3.3 去除变量左数最后某个字符到右边的所有内容 (使用变量) (掐头) (不包含此字符本身)
# value=mingyuzhu
# novalue=ming
# newvalue=${value##$novalue}
# echo $newvalue
yuzhu

(补充:这里以截取变量 value 左数最后 1 个 ming 右边的所有内容并赋予给变量 newvalue 为例)

内容四:当变量已定义且不为空时则将变量中的某部分替换成另一部分

# value=mingyuzhu
# noneedvalue=yu
# needvalue=zhu
# newvalue=${value/$noneedvalue/$needvalue}
# echo $newvalue
mingzhuzhu

(补充:这里以将变量 value 中的 yu 替换成 zhu 并赋予给变量 newvalue 为例)