首页 > 系统相关 >Linux初学者的全面指南(四):shell编程(下)

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

时间:2024-12-23 22:56:25浏览次数:6  
标签:语句 shell echo 运算符 命令 result Linux bash 初学者

目录

一、表达式与运算符

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脚本至关重要。 

标签:语句,shell,echo,运算符,命令,result,Linux,bash,初学者
From: https://blog.csdn.net/Ccwlwlbb51522/article/details/144532825

相关文章

  • linux 操作系统下info命令介绍和使用案例
    linux操作系统下info命令介绍和使用案例info命令是Linux系统中用于查看和访问信息文档的工具,特别是GNU项目的帮助文档。与传统的man命令相比,info提供了更为详细和结构化的文档,通常以节点(node)的形式组织内容,支持交叉引用和链接跳转,使得用户可以更方便地浏览和获取信息。主要......
  • Linux中设置终端窗口大小
    本章目录本次示例以Ubuntu为例:Ctrl+Alt+T先打开一个终端设置行列大小,重启终端生效:同理,此处也可设置字体、颜色等其它属性,可自由选择,希望对你有帮助;本次示例以Ubuntu为例:Ctrl+Alt+T先打开一个终端设置行列大小,重启终端生效:同理,此处也可设置字体、颜色......
  • Linux 软硬链接详解:深入理解与实践
    目录引言Linux文件系统基础2.1文件与目录2.2Linux文件系统结构硬链接(HardLink)详解3.1什么是硬链接3.2硬链接的工作原理3.3硬链接的使用方法3.4硬链接的限制软链接(SymbolicLink)详解4.1什么是软链接4.2软链接的工作原理4.3软链接的使用方法4.4软链接的优......
  • Linux之Vim编辑器
    Vim文本编辑器Linux系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。Vi编辑器是Unix系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。在GNU项目中,程序员在将Vi......
  • Linux学习笔记(三) 关机重启&用户切换注销指令
    关机&重启指令:shutdown-hnow(立即进行关机)shutdown-h1"hello,1分钟后会关机"(后面字符串可以修改,执行这条命令后,所有当前登录的用户,都可以看到hello,1分钟后会关机)shutdown-rnow(现在重新启动计算机)halt(关机,作用和上面一样)reboot(现在重新启动计算机)......
  • Linux -Vim
    博客主页:【夜泉_ly】本文专栏:【Linux】欢迎点赞......
  • [Linux操作系统]进程的状态一览
    0.前言嗨害嗨,来了嗷~,无论是在Linux操作系统中,还是在Windows操作系统中,进程管理都是十分重要的一环,这篇文章呢?我想来聊聊在Linux操作系统下对于进程的管理中,进程状态的这一部分。先附上一个通用操作系统概念下的进程的状态的图片:(这图百度找的~)1.Linux操作系统下进程状态......
  • Linux开发帮助参考
    在开发Linux系统下面软件时常常需要查阅手册,但是如果你的开发平台不是Linux系统,那你无法丝滑使用man手册,这里推荐一些方便的Linux开发手册。 手册:在线man手册:LinuxManPagesOnlinearch社区:Archmanualpages (arch社区的各种文档都很齐全,是很好的Linux使用和开发参考)debia......
  • 【嵌入式Linux】---- 基于petaLinux和SDK开发的LED驱动和应用测试(全流程实战)
    1配置petaLinux环境变量在Linuxproject目录下,打开终端,输入命令source/opt/pkg/petalinux/2018.3/settings.sh2新建petaLinux工程petalinux-create-tproject--templatezynq-nZYNQ7010_LED3配置petaLinux工程输入cdZYNQ7010_LED,进入刚刚创建的工程文件;输入p......
  • Linux常用命令之locate命令详解
    locate是一个用于快速查找文件和目录的命令行工具,它通过预先构建的数据库来加速搜索过程。与find命令不同的是,locate不会实时遍历文件系统,而是依赖于定期更新的索引数据库,因此速度更快但可能不如find准确。功能与作用快速查找:locate通过查询预先构建的数据库来定位......