Linux初学者的全面指南(四):shell编程(下)

目录

一、表达式与运算符

1.表达式

2.运算符 

 二、流程控制语句

1.多命令组合

 2.分支结构

三、函数 

1.定义与调用

2.参数

3.定义与调用

4.返回值 

总结


一、表达式与运算符

1.表达式

算术表达式

  • bash自身并不支持简单的数学运算,但可通过awk 和expr等命令来实现数学运算。
  • expr最为常用,使用它能够完成表达式的求值操作。          

expr 5 + 3          操作数与运算符之间一定要有空格

  • 更为简单的方式是使用$[]表达式进行数学计算。          

val=$[5+3]       操作数与运算符之间不能有空格

  • $(( )) 也是常用的方式          

val=$((5+3))    操作数与运算符之间不能有空格

#!/bin/bash

result_expr=$(expr 5 + 3)

echo "使用 expr 计算 5 + 3 = $result_expr"

result_brackets=$[5+3]

echo "使用 \$[] 计算 5 + 3 = $result_brackets"

result_double=$((5+3))

echo "使用 \$(( )) 计算 5 + 3 = $result_double" 

逻辑表达式

  • 逻辑表达式主要用于条件判断,值为true(或0)表示结果为真;值为false(非零值)表示结果为假。
  • 通常使用test命令来判断表达式的真假。              

                 test  逻辑表达式

#!/bin/bash

test 5 -gt 3

echo $?  # 输出 0,表示为真

test 3 -gt 5

echo $?  # 输出 1,表示为假 

逻辑表达式

  • Linux每个版本中都包含test命令,但该命令有一个更常用的别名,即左方括号“[”。            

                 [ 逻辑表达式 ]

  • 当使用左方括号而非test时,其后必须始终跟着一个空格、要评估的逻辑表达式、一个空格和右方括号,右方括号表示所需评估表达式的结束。逻辑表达式两边的空格是必需的。

#!/bin/bash

[ 5 -gt 3 ]

echo $?  # 输出 0,表示为真

[ 3 -gt 5 ]

echo $?  # 输出 1,表示为假 

2.运算符 

算术运算符

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取余
  • =:赋值

#!/bin/bash

val1=10

val2=3

result_add=$((val1 + val2))

echo "加法:$val1 + $val2 = $result_add"

result_sub=$((val1 - val2))

echo "减法:$val1 - $val2 = $result_sub"

result_mul=$((val1 * val2))

echo "乘法:$val1 * $val2 = $result_mul"

result_div=$((val1 / val2))

echo "除法:$val1 / $val2 = $result_div"

result_mod=$((val1 % val2))

echo "取余:$val1 % $val2 = $result_mod"

整数关系运算符

 

#!/bin/bash

a=5

b=3

if [ $a -eq $b ]; then    

echo "$a 等于 $b" else    

echo "$a 不等于 $b"

fi

............. ..............

if [ $a -ge $b ]; then    

echo "$a 大于或等于 $b" else    

echo "$a 小于 $b"

fi

if [ $a -le $b ]; then    

echo "$a 小于或等于 $b" else    

echo "$a 大于 $b"

fi 

字符串检测运算符

 文件测试运算符

 布尔运算符

假设a=8  b=20

 二、流程控制语句

1.多命令组合

  • 使用逻辑与符号“&&”连接多条命令      

                命令1  &&  命令2

  • 使用逻辑或符号“||”连接多条命令      

                命令1  ||  命令2

  • 联合使用符号“&&”和“||”    

                命令1 &&  命令2  ||  命令3    

                命令1  ||  命令2  &&  命令3

  • 使用括号()组合多条命令      

                (命令1 && 命令2) || 命令3

示例:

# 创建一个目录,进入目录,如果成功则列出文件,否则输出错误信息

mkdir my_directory && (    

cd my_directory && ls || echo "目录为空或无法列出文件"

) || echo "创建目录失败"

 2.分支结构

基本if语句

if [ 条件 ]; then    

        # 条件为真时执行的命令

fi

#!/bin/bash

number=10

if [ $number -gt 5 ]; then

    echo "数字大于5"

fi

if...else 语句

if [ 条件 ]; then

    # 条件为真时执行的命令

else

    # 条件为假时执行的命令

fi 

#!/bin/bash

number=3

if [ $number -gt 0 ]; then

    echo "数字是正数" else

    echo "数字不是正数"

fi 

if...elif...else 语句

if [ 条件1 ]; then

    # 条件1为真时执行的命令

elif [ 条件2 ]; then

    # 条件2为真时执行的命令

else

    # 条件1和条件2都不满足时执行的命令

fi 

#!/bin/bash

number=-1

if [ $number -gt 0 ]; then

    echo "数字是正数"

elif [ $number -eq 0 ]; then

    echo "数字是零"

else

    echo "数字是负数"

fi 

使用 ! 进行非运算

if [ ! 条件 ]; then

    # 条件为假时执行的命令

fi 

使用方括号 [[ ]]    在bash执行下才有效

if [[ 条件 ]]; then

    # 条件为真时执行的命令

fi 

case语句

case 值 in

模式1)

    语句序列1

    ;;

模式2)

    语句序列2

    ;;

    …… 模式n)

    语句序列n     ;;

*)

     其他语句序列

esac 

 

循环语句

while循环语句

while 测试条件

do      

语句序列

done 

#!/bin/bash

count=1

# 当计数器小于等于5时循环

while [ $count -le 5 ]

do

    echo "计数: $count"

    count=$((count + 1))  # 增加计数器

done 

until循环语句的用法和while循环语句的用法相同。

for循环语句

    for 变量 [in 列表]

  do

      语句序列

  done

#!/bin/bash

fruits=("苹果" "香蕉" "橙子")

for fruit in "${fruits[@]}"

do

    echo "水果: $fruit"

done 

其他循环语句

  • break语句用来终止一个重复执行的循环
  • break [n]
  • continue语句跳过当前循环体中位于它后面的语句,直接进入下一次循环
  •     continue [n]
  • exit语句用来退出一个Shell程序并设置退出值  n 是退出状态码,默认为 0(表示成功)。
  •     exit [n] 

三、函数 

1.定义与调用

函数定义

  • Shell 函数必须先定义后使用。

    [function] 函数名()

    {

        命令序列

        [return 返回值]

      }

函数调用

  • 调用函数只需要给出函数名,不需要加括号,就像一般命令那样使用。

          函数名 参数1 参数2 …… 参数n

2.参数

  • 在Shell中调用函数时可以向其传递参数。
  • 与脚本一样,在函数体内部也是通过$n的形式来获取参数的值。
  • $1表示第一个参数。
  • $2表示第二个参数。 

3.定义与调用

4.返回值 

使用全局变量

  • 先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数的返回值。
  • 使用变量要注意不要修改父脚本里不期望被修改的内容。

#!/bin/bash

result=0

getsum() {

    result=$(( $1 + $2 ))  # 修改全局变量

}

getsum 5 10

echo "和是: $result"  

在函数中使用标准输出

将一个Shell函数作为一个子程序调用(命令替换),将返回值写到子程序的标准输出。 

#!/bin/bash

getdatetime() {

    echo "当前日期和时间: $(date)"

}

current_time=$(getdatetime)

echo "$current_time" 

可重用性:通过将结果存储在变量中,可以在脚本的多个地方引用这个值,而不需要多次调用函数。

避免冗余:如果只需要使用函数的输出而不想立即打印,命令替换可以避免不必要的输出。 

在函数中使用return返回整数值

  • $?是一个特殊的内部变量,可用于获取上一个命令执行后的返回结果,可以直接通过函数return语句来接收返回值。 

#!/bin/bash

calculate_sum() {

    local sum=$(( $1 + $2 ))

    return $sum

  }

calculate_sum 5 10

result=$?  # 获取上一个命令的返回值

echo "5 + 10 = $result"

总结

        Linux Shell编程是一种灵活的脚本语言,它通过表达式和运算符来执行计算和字符串操作,其中表达式可以是简单的变量或复杂的函数调用,而运算符则定义了这些表达式如何被计算。流程控制语句是Shell编程的核心,它们允许通过多命令组合和分支结构来控制脚本的执行流程,使得任务自动化和条件执行成为可能。函数在Shell编程中扮演着重要角色,它们可以被定义和调用,接受参数,并返回值,从而提高代码的模块化和重用性。掌握这些基本概念对于编写高效、可维护的Shell脚本至关重要。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值