Shell编程 算数和字符串运算(Ubuntu)

目录

前序:shell中的输入和输出

1.输入

2.输出 -----> echo

1.shell中的算数运算

1.(()) 进行算数运算

2.$[]

3.let

expr

字符串的运算

if语句

case in

While

for

select in

shell 函数


前序:shell中的输入和输出

1.输入

read var

read var1 var2        两个值之间用空格或者tab键        不能用回车

read -p "提示字符串" var

read -t 秒 var                  多少秒后如果没有输入就结束

read -n num var                  输入num个字符后结束输入

read -s var 输入的内容不回显 类似于输入密码

2.输出 -----> echo

1.shell中的算数运算

shell进行算数运算效率不如C语言高

shell兼容C语言的所有算数运算,同时进行了扩展

**(幂运算)      *(通配符)    \*(乘法)      ()(数组)           \(\)括号        

某些运算符需要进行转义才能使用

shell中所有变量都是字符串,所以要进行转换

1>(())

2>$ []

3>let

4>expr

1.(()) 进行算数运算

格式:((表达式1,表达式2,表达式3 ......))

                        最后一个表达式的结果是输出的结果

获取输出的结果

           var=$((表达式1,表达式2,表达式3 ......))

注:

        1>括号中表达式使用变量时,$可加可不加,建议加

        2>运算符的前后的空格     可加可不加

        3>括号内可以写C语言的任何运算,甚至更复杂的运算        

2.$[]

        1>格式:ret=[表达式1,表达式2,.........]最后一个表达式的结果作为整个表达式的结果

        2>$[]进行运算时,必须有一个变量来接收其返回值

        3>在运算符内使用变量时,$可加可不加

        4>运算符前后的空格     可加可不加

3.let

        1>格式:let sum=var1运算符var2

        2>let必须放到最前边

        3>运算符两边不可以有空格

        4>使用变量时,$可加可不加

expr

1>格式

expr     表达式

2>使用变量时,必须加$

3>运算符的前后必须加空格expr $var1 + $var2

expr   是一个     命令

$var1  +  $var2   是命令的3个参数

4>expr不能进行自增自减的运算

expr  $var1++         #Error

expr     $var1   +   1       #OK

5>expr使用部分运算符必须进行转义

                      \*        \>        \<              \(\)        .....

需要转义的运算符也可以加单引号''

6>expr中使用变量时,最好使用双引号将变量括起来

expr          $var1"   运算符    "$var2"

7>如何将expr的结果赋值给一个变量

ret=`expr    "$var1"   运算符   "$var2"  `

8>算数运算符

$arg1   \>   $arg2成立返回1,不成立返回0

$arg1   \<   $arg2

$arg1   \>=   $arg2

$arg1   \<=   $arg2

$arg1   !=   $arg2

$arg1   =   $arg2

$arg1    +|-|\*|/|%    $arg2

以上运算符使用变量时可以不加双引号

"$arg1"   \|    "$arg2"   只要两个变量有一个不为空或者非0,就会返回arg1的值,否则返回0
"$arg1"    \&    "$arg2"只有两个变量都为真(变量不为空或者0),才会返回arg1的值,否则返回0

进行|和&运算时,使用变量时必须使用双引号。

字符串的运算

expr match STRING REGEXP

从STRING字符串中第一个字符开始匹配REGEXP字符串,匹配成功返回匹配的字符的个数,失败返回0

expr substr STRING POS LENGTH:从STRING字符串中第POS位置开始截取,截取的长度为LENGTH,将截取的字符串返回,(注:字符串的第一个字符从1开始)

expr index STRING CHARS:查找CHARS字符在STRING字符串出现的位置,返回值是字符串的下边(注:字符串的第一个字符从1开始)如果一个字符串中有多个相同字符,匹配到第一个就会结束

expr length STRING:计算STRING字符串的长度

${#str}---》计算字符串的长度

if语句

1.格式

if [ 表达式 ]                          写到一行:        if [ 表达式 ]   ; then

then

      语句

elif [ 表达式 ]                         写到一行:        elif [ 表达式 ]   ; then

then

     语句

else 

      语句

fi

[]       本质是 调用test命令,man test     里边的变量或参数要用变量隔开

if [ 表达式 ]          <====>            if test 表达式

(1)字符串对象(⼀定要注意在进⾏字符串的判断的时候都需要加上“”,“$a” "hello")

-z 判断字符串是否为空

-n 判断字符串是否为⾮空

=或== 都是⽤来判读字符串是否相等

!= 不等于

\> ⼤于 (防⽌误认为重定向)

\< ⼩于

​ (2)数字对象

-eq : 等于

-ne : 不等于

-gt : ⼤于

-lt : ⼩于

-ge : ⼤于等于

-le : ⼩于等于 ​

(3)⽂件属性

-b filename 判断⽂件是否存在,是否是块设备

-c filename 判断⽂件是否存在,是否是字符设备

-d filename 判断⽂件是否存在,是否是⽬录

-f filename 判断⽂件是否存在,是否是普通⽂件

-p filename 判断⽂件是否存在,是否是管道⽂件

-L filename 判断⽂件是否存在,是否是链接⽂件 (经测试链接⽂件也是普通⽂件)

-S filename 判断⽂件是否存在,是否是套接字⽂件

-e filename 判断⽂件是否存在

-s filename 判断⽂件是否存在,判断⽂件是否为空

(4)⽂件权限

-r filename 判断⽂件是否存在,是否有可读权限

-w filename 判断⽂件是否存在,是否有可写权限

-x filename 判断⽂件是否存在,是否有可执⾏权限

(5)⽂件⽐较

-nt ⽂件是否更新

-ot ⽂件是否更旧

-ef ⽂件的inode是否⼀致

[ filename1 -nt filename2 ]

(6)逻辑运算

-a 与 &&

-o 或 ||

! ⾮ !

case in

等价于C语言的switch case 语句

case $var in

        表达式)

                语句

                ;;                      <==============>      break

        表达式)

                语句

                ;;

        *)                     <==============>      default

                语句

                ;;

esac

表达式的形式:

[a-zA-Z]                  ====>a-z和A-Z 之间的所有字符(通配一个)

[1-9]                       ====>数字1-9

*                             ====>所有

a|b|t|i                       ====>a b t i 任意一个字符

Y|y|Yes| yEs            ====>通配任意一个字符串

While

while [ 表达式 ]

do

          语句

done

for

方式1:

for ((表达式1;表达式2;表达式3))

do 

       语句

done

方式2:

for var in 单词列表    单词列表每个以空格隔开的字符赋值给var,直到全部赋值

do 

       语句

done

select in

为了更好的提高代码的交互性

select var in 选项列表

do

      语句

done

常和case连用

shell 函数

1.shell中函数的语法格式

function 函数名(){

         函数体

}

注:

1> shell中的函数使用function进行修饰,function可写可不写,建议写

2> shell中的函数没有返回类型,如果接收shell函数的返回值呢?

        2.1> shell中定义的变量默认就是全局的变量,可以直接使用

        2.2>如果shell中的变量使用local定义为局部的变量

               可以使用return进行返回,return返回只能返回0-255之间的数。接收返回值使用$?

                      $?可以获取上一条指令的执行结果

         2.3>在函数中可以使用echo命令输出函数的返回值

                       接收函数的返回值时,使用命令置换符``,获取函数的返回结果。

3>函数的形参

             shell的函数不需要形参列表,但是可以给函数传递实参

                 在shell函数内如何获取给shell函数传递的实参值呢?使用位置变量

4> shell中的函数依然要向c中的函数遵循先声明定义,后使用的原则

             但是shell中的函数都是声明和定义写到一起

                 及she17中的函数的定义应该写到函数调用的前边

5. shell中的函数的调用

              函数名       实参列表

#!/bin/bash

function arr_sum(){
    local sum=0
    for p in $*
    do
        ((sum=sum+$p))
    done
    echo $sum
}

read -p "请输入一个数组:>"  -a  arr   #-a是输入一个数组的参数
value=`arr_sum ${arr[*]}`
echo $value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒丨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值