【linux】(26)shell脚本-变量、位置变量

news/2024/12/5 2:07:37/

定义和使用变量

定义变量

在 Shell 脚本中定义变量非常简单,直接赋值即可:

#!/bin/bash
name="Alice"

注意,等号两边不能有空格。

使用变量

使用变量时需要在变量名前加上 $ 符号:

#!/bin/bash
name="Alice"
echo "Hello, $name!"

或者使用花括号:

#!/bin/bash
name="Alice"
echo "Hello, ${name}!"

变量类型

字符串变量

字符串是最常用的变量类型:

#!/bin/bash
greeting="Hello, World!"
echo $greeting

数值变量

虽然 Shell 不支持直接的数值运算,但可以使用 expr 或双括号进行算术运算:

#!/bin/bash
a=5
b=3
sum=$(expr $a + $b)
echo "Sum is $sum"# 或者使用双括号
sum=$((a + b))
echo "Sum is $sum"

位置变量

位置变量(Positional Parameters)是 Shell 脚本中用于处理命令行参数的一种特殊变量。这些变量使得脚本可以从命令行接收输入,并根据输入执行相应的操作。

位置变量是 Shell 脚本中用来访问命令行参数的特殊变量。它们根据传递给脚本的参数位置进行编号:

  • $0:脚本的名称。
  • $1$9:传递给脚本的第 1 到第 9 个参数。
  • ${10} 及以上:传递给脚本的第 10 个及以上的参数。
  • $#:传递给脚本的参数个数。
  • $@:传递给脚本的所有参数(每个参数独立引用)。
  • $*:传递给脚本的所有参数(作为一个单词引用)。
  • $$:当前 Shell 进程的进程 ID。
  • $?:上一个命令的退出状态。
  • $!:最后一个后台进程的进程 ID

使用位置变量

基本示例

编写一个简单的脚本来演示位置变量的使用:

#!/bin/bashecho "Script name: $0"
echo "First parameter: $1"
echo "Second parameter: $2"
echo "Number of parameters: $#"
echo "All parameters (individually quoted): $@"
echo "All parameters (single quoted): $*"

保存为 positional.sh 并赋予执行权限:

chmod +x positional.sh

运行脚本并传递参数:

./positional.sh arg1 arg2 arg3

输出:

Script name: ./positional.sh
First parameter: arg1
Second parameter: arg2
Number of parameters: 3
All parameters (individually quoted): arg1 arg2 arg3
All parameters (single quoted): arg1 arg2 arg3

访问超过 9 个参数

如果传递的参数超过 9 个,可以使用大括号进行引用:

#!/bin/bashecho "Tenth parameter: ${10}"

特殊变量

  • $#:传递给脚本的参数个数。
  • $@$* 的区别:
    • $@:每个参数作为独立的引用。
    • $*:所有参数作为一个单独的字符串。
$# 示例
#!/bin/bashecho "Number of parameters: $#"
$@$* 示例

编写脚本 params.sh

#!/bin/bashecho "\$@ example:"
for param in "$@"; doecho "$param"
doneecho "\$* example:"
for param in "$*"; doecho "$param"
done

运行脚本:

./params.sh "arg1" "arg2" "arg3"

输出:

$@ example:
arg1
arg2
arg3
$* example:
arg1 arg2 arg3

使用位置参数进行计算和操作

求和脚本

编写一个求和脚本:

#!/bin/bashsum=0
for arg in "$@"; dosum=$((sum + arg))
doneecho "Sum of parameters: $sum"

保存为 sum.sh 并赋予执行权限:

chmod +x sum.sh

运行脚本:

./sum.sh 1 2 3 4 5

输出:

Sum of parameters: 15

字符串拼接脚本

编写一个字符串拼接脚本:

#!/bin/bashresult=""
for arg in "$@"; doresult="$result$arg "
doneecho "Concatenated string: $result"

保存为 concat.sh 并赋予执行权限:

chmod +x concat.sh

运行脚本:

./concat.sh Hello World from Shell

输出:

Concatenated string: Hello World from Shell 

使用位置参数进行条件判断

编写一个判断脚本,根据参数执行不同操作:

#!/bin/bashif [ "$1" == "start" ]; thenecho "Starting the service..."
elif [ "$1" == "stop" ]; thenecho "Stopping the service..."
elseecho "Usage: $0 {start|stop}"
fi

保存为 service.sh 并赋予执行权限:

chmod +x service.sh

运行脚本:

./service.sh start
./service.sh stop
./service.sh status

输出:

Starting the service...
Stopping the service...
Usage: ./service.sh {start|stop}

示例总结

打印参数信息

#!/bin/bashecho "Script name: $0"
echo "Number of parameters: $#"
echo "All parameters (individually quoted): $@"
echo "All parameters (single quoted): $*"
echo "First parameter: $1"
echo "Second parameter: $2"

参数求和

#!/bin/bashsum=0
for arg in "$@"; dosum=$((sum + arg))
doneecho "Sum of parameters: $sum"

条件判断

#!/bin/bashif [ "$1" == "start" ]; thenecho "Starting the service..."
elif [ "$1" == "stop" ]; thenecho "Stopping the service..."
elseecho "Usage: $0 {start|stop}"
fi

http://www.ppmy.cn/news/1552437.html

相关文章

llamaindex实战-ChatEngine-ReAct Agent模式

概述 ReAct 是一种基于Agent的聊天模式,构建在数据查询引擎之上。对于每次聊天交互,代理都会进入一个 ReAct 循环: 首先决定是否使用查询引擎工具并提出适当的输入 (可选)使用查询引擎工具并观察其输出 决定是否重复…

C. Raspberries

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array of integers a1,a2,…,ana1,a2,…,an and a number kk (2≤k≤52≤k≤5). In one operation, you can do the following: Choose an index 1≤i≤n1≤i≤n,Set aiai1aiai1. F…

【k8s】kubelet 的相关证书

在 Kubernetes 集群中,kubelet 使用的证书通常存放在节点上的特定目录。这些证书用于 kubelet 与 API 服务器之间的安全通信。具体的位置可能会根据你的 Kubernetes 安装方式和配置有所不同,下图是我自己环境【通过 kubeadm 安装的集群】中的kubelet的证…

单台服务器上创建多个端口MySQL服务

单台服务器上创建多个端口MySQL服务 直接拷贝已经运行的数据库文件: # ll /data/mysql/ 总用量 204 drwxr-x--- 2 mysql mysql 4096 9月 15 2023 bin -rw-r--r-- 1 mysql mysql

ubuntu查看本地镜像源可用的deb包

在Ubuntu系统中,查看本地镜像源可用的deb包可以通过以下几种方法实现: 方法一:使用apt-cache命令 apt-cache命令可以用来查询本地和远程的软件包信息。你可以使用以下命令来查看本地镜像源可用的deb包: apt-cache search .这个…

Android 使用OpenGLES + MediaPlayer 获取视频截图

概述 Android 获取视频缩略图的方法通常有: ContentResolver: 使用系统数据库MediaMetadataRetriever: 这个是android提供的类,用来获取本地和网络media相关文件的信息ThumbnailUtils: 是在android2.2(api8)之后新增的一个,该类为…

《智能体雏形开发(高阶实操)》开发计划概述

智能体雏形开发计划 通过本计划,逐步完成一个可以真实运行的智能体雏形。 最终完成一个**“用户日志文件生成日报,日报再进一步汇总成周报”**的任务驱动型智能体雏形 第一阶段:基础准备与环境搭建 1. 学习基础知识 了解智能体的概念、类型和技术框架。学习大模型(如阿里…

【C++】数组

1.概述 所谓数组,就是一个集合,该集合里面存放了相同类型的数据元素。 数组特点: (1)数组中的每个数据元素都是相同的数据类型。 (2)数组是有连续的内存空间组成的。 2、一维数组 2.1维数组定…