【Shell编程 / 4】函数定义、脚本执行与输入输出操作

函数 与 脚本

在 Shell 编程中,函数和脚本是组织代码、提高复用性、简化调试的重要工具。下面我们将学习 如何在 Shell 中定义函数、执行脚本、获取输入与输出,以及如何处理命令行参数。

定义函数

Shell 允许 在脚本中定义函数,以便将常用的功能模块化,从而使得代码更加简洁易懂。函数的基本语法如下:

function_name() {
    
    
  # 函数体
  # 执行操作
}

我们也可以使用 function 关键字来定义函数:

function function_name {
    
    
  # 函数体
  # 执行操作
}

示例:简单的 Shell 函数

# 定义一个简单的函数,输出传入的参数
greet() {
    
    
  echo "Hello, $1!"
}

# 调用函数
greet "Alice"  # 输出: Hello, Alice!

函数参数

Shell 函数可以接收传入的参数,参数在函数内部通过 $1$2 等变量进行访问,其中 $1 表示第一个参数,$2 表示第二个参数,依此类推。也可以使用 $@ 来表示所有传入的参数。

# 函数接收多个参数
sum() {
    
    
  result=$(( $1 + $2 ))
  echo "The sum is: $result"
}

# 调用函数并传递参数
sum 3 5  # 输出: The sum is: 8

返回值

Shell 函数没有明确的返回值,但可以通过 echoprintf 将结果输出,并通过 $? 来获取函数执行的返回状态码。$? 返回的是函数或命令执行后的退出状态,0 表示成功,非零表示失败。

# 返回状态码
is_even() {
    
                                                                                                                        
  if [ $(( $1 % 2 )) -eq 0 ]; then
    return 0  # 返回 0 表示偶数
  else
    return 1  # 返回 1 表示奇数
  fi
}

is_even 4
echo $?  # 输出: 0

is_even 5
echo $?  # 输出: 1

脚本执行

Shell 脚本是由一系列 Shell 命令组成的文本文件,可以包含函数、流程控制语句、输入输出等。执行 Shell 脚本需要具备一定的权限,并使用合适的命令来运行脚本。

创建脚本

一个简单的 Shell 脚本通常包含以下几个部分:

  1. Shebang(#!): 它告诉系统应该使用哪个解释器来执行脚本。例如,#!/bin/bash 表示使用 bash 解释器执行脚本。
  2. 命令和控制结构: 包含希望脚本执行的具体操作,如文件操作、条件判断、循环等。
#!/bin/bash

# 输出当前日期和时间
echo "Today's date is $(date)"

# 执行其他命令

执行脚本

  1. 赋予执行权限:在执行脚本之前,首先需要确保脚本具有可执行权限。(通过 chmod 命令)。
chmod +x script.sh
  1. 执行脚本:可以直接使用 ./ 来执行脚本。./ 表示当前目录,因此 ./script.sh 表示执行当前目录中的 script.sh 文件。
./script.sh

如果没有在文件夹中运行脚本,也可以直接通过解释器来执行脚本,例如:

bash script.sh

输入输出

Shell 脚本通过 echoprintf 输出信息,并且通过 read 命令接收用户输入。

输出:`echo 和 printf

  • echo: echo 是最常用的输出命令,用于在终端打印文本。
echo "Hello, world!"  # 输出: Hello, world!
  • printf: printf 提供更强大的格式化功能,类似于 C 语言中的 printf
# 使用 printf 格式化输出
printf "Hello, %s!\n" "Alice"  # 输出: Hello, Alice!

输入:read 命令

read 命令用于从用户获取输入并将其存储到变量中。可以提示用户输入信息,并根据输入值执行相应的操作。

echo "Enter your name:"
read name
echo "Hello, $name!"

也可以在一行内获取多个输入:

echo "Enter your age and city:"
read age city
echo "You are $age years old and live in $city."

命令行参数

Shell 脚本可以通过命令行参数接收外部输入。在脚本执行时,可以在命令行中传递多个参数,脚本会通过 $1$2 等变量来访问这些参数。

  • $1$2 等表示传递给脚本的第一个、第二个参数,依此类推。
  • $# 表示传递给脚本的参数个数。
  • $@ 表示所有传递给脚本的参数。
# 一个简单的脚本例子
#!/bin/bash

echo "Script name: $0"  # 输出脚本的名称
echo "First argument: $1"
echo "Second argument: $2"
echo "Total number of arguments: $#"
echo "All arguments: $@"

示例:传递参数

$ ./script.sh arg1 arg2
Script name: ./script.sh
First argument: arg1
Second argument: arg2
Total number of arguments: 2
All arguments: arg1 arg2