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

news2024/12/26 21:52:04

定义和使用变量

定义变量

在 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/bash

echo "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/bash

echo "Tenth parameter: ${10}"

特殊变量

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

echo "Number of parameters: $#"
$@$* 示例

编写脚本 params.sh

#!/bin/bash

echo "\$@ example:"
for param in "$@"; do
    echo "$param"
done

echo "\$* example:"
for param in "$*"; do
    echo "$param"
done

运行脚本:

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

输出:

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

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

求和脚本

编写一个求和脚本:

#!/bin/bash

sum=0
for arg in "$@"; do
    sum=$((sum + arg))
done

echo "Sum of parameters: $sum"

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

chmod +x sum.sh

运行脚本:

./sum.sh 1 2 3 4 5

输出:

Sum of parameters: 15

字符串拼接脚本

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

#!/bin/bash

result=""
for arg in "$@"; do
    result="$result$arg "
done

echo "Concatenated string: $result"

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

chmod +x concat.sh

运行脚本:

./concat.sh Hello World from Shell

输出:

Concatenated string: Hello World from Shell 

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

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

#!/bin/bash

if [ "$1" == "start" ]; then
    echo "Starting the service..."
elif [ "$1" == "stop" ]; then
    echo "Stopping the service..."
else
    echo "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/bash

echo "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/bash

sum=0
for arg in "$@"; do
    sum=$((sum + arg))
done

echo "Sum of parameters: $sum"

条件判断

#!/bin/bash

if [ "$1" == "start" ]; then
    echo "Starting the service..."
elif [ "$1" == "stop" ]; then
    echo "Stopping the service..."
else
    echo "Usage: $0 {start|stop}"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2253093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计费结算系统的架构设计思路

背景 近期负责关于集团的计费结算相关的系统,相对于2C系统的大流量,高并发的场景,计费和结算的信息对稳定性要求更高。对时效性要求并没有过于严苛的要求。那么接下来就和大家分享一下计费结算系统的架构设计。 模块划分 我们暂且将平台细分…

人工智障(5)

今天kimi把我气疯了,你们看原对话: 月之暗面最近在搞什么,不仅算力慢,而且回答离谱的要死,难道换老板了?

Python爬虫——城市数据分析与市场潜能计算(Pandas库)

使用Python进行城市市场潜能分析 简介 本教程将指导您如何使用Python和Pandas库来处理城市数据,包括GDP、面积和城市间距离。我们将计算每个城市的市场潜能,这有助于了解各城市的经济影响力。 步骤 1: 准备环境 确保您的环境中安装了Python和以下库&…

Python毕业设计选题:基于Flask的医疗预约与诊断系统

开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 疾病信息 就诊信息 个人中心 管理员登录界面 管理员功能界面 用户界面 医生…

Android 图形系统之二:ViewRootImpl

ViewRootImpl简介 ViewRootImpl 是 Android UI 系统的核心类之一,负责将 View 层级树与窗口管理器 WindowManager 联系起来。它是Android 应用视图的根节点,与 WindowManager 结合,实现视图的绘制、事件分发、窗口更新等功能。虽然 ViewRoot…

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注:pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…

基于单片机的智能药箱设计

本设计主要由红外检测传感器、显示、独立按键、舵机、语音以及短信等模块组成。红外传感器模块主要对药仓中的药物数据进行采集,采集完毕由主控制器进行数据加工,之后可传送至显示模块上进行显示,在显示模块也可对显示时间、吃药倒计时、吃药…

【掩体计划——DFS+缩点】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e5 10; vector<vector<int>> g; bool st[N]; int ans 1e9; bool dfs(int f, int u, int dis) {bool is 1;for (auto j : g[u]){if (j f)continue;is & dfs(u, j, dis (g[u].…

无人机点云处理算法技术解析!

一、核心技术 数据预处理&#xff1a; 数据预处理是点云处理的第一步&#xff0c;主要包括滤波、去噪、数据压缩等。滤波技术可以去除点云数据中的噪声和孤立点&#xff0c;提高数据质量。常用的滤波方法包括双边滤波、高斯滤波等。 数据压缩则用于减少数据量&#xff0c;提…

Android13 允许桌面自动旋转

一&#xff09;需求-场景 Android13 实现允许桌面自动旋转 Android13 版本开始后&#xff0c;支持屏幕自动旋转&#xff0c;优化体验和兼容性&#xff0c;适配不同屏幕 主界面可自动旋转 二&#xff09;参考资料 android framework13-launcher3【06手机旋转问题】 Launcher默…

vue+uniapp+echarts的使用(H5环境下echarts)

1.安装 npm install echarts4.9.0 --save // 带版本号 2.main.js中全局引用 // import echarts from echarts // 如果是5.0以上版本用这个 import * as echarts from echarts Vue.prototype.$echartsecharts 3.使用 <template><view id"box" style"w…

探索仓颉编程语言:官网上线,在线体验与版本下载全面启航

文章目录 每日一句正能量前言什么是仓颉编程语言仓颉编程语言的来历如何使用仓颉编程语言在线版本版本下载后记 每日一句正能量 当你被孤独感驱使着去寻找远离孤独的方法时&#xff0c;会处于一种非常可怕的状态。因为无法和自己相处的人也很难和别人相处&#xff0c;无法和别人…

【Elasticsearch】Docker安装和基本概念

1. Docker安装ES 拉取es镜像 docker pull elasticsearch:8.5.3 创建网络 docker network create oj-network 启动es docker run -d --name oj-es-dev -e "ES_JAVA_OPTS-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v D:\javacode\oj-byte\depl…

基于Java Springboot环境保护生活App且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

[SWPUCTF 2021 新生赛]gif好像有点大

[SWPUCTF 2021 新生赛]gif好像有点大 帧解一下 找到这个二维码用软件CQR解开一下 得到flag NSSCTF{The_G1F_ls_T00_b1g} [BJDCTF 2020]base?? 给了我们base64加密的密文 用python直接解密 import base64 dict{0: J, 1: K, 2: L, 3: M, 4: N, 5: O, 6: x, 7: y, 8: U, 9: …

Unity类银河战士恶魔城学习总结(P156 Audio Settings音频设置)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了音频的大小设置与保存加载 音频管理器 UI_VolumeSlider.cs 定义了 UI_VolumeSlider 类&#xff0c;用于处理与音频设置相关的…

【Java从入门到放弃 之 类加载器】

类加载器 ClassLoader 类加载器动态加载类的两种方式类加载过程双亲委派模型特点类加载器层次结构 自定义类加载器总结 类加载器 类加载器负责将Java字节码文件&#xff08;.class文件&#xff09;动态加载到内存中&#xff0c;并将其转化为JVM可以执行的类对象。它是Java运行…

华为HarmonyOS 让应用快速拥有账号能力 -- 1 华为账号一键登录

概述 华为账号一键登录是基于OAuth 2.0协议标准和OpenID Connect协议标准构建的OAuth2.0 授权登录系统&#xff0c;应用可以通过华为账号一键登录能力方便地获取华为账号用户的身份标识和手机号&#xff0c;快速建立应用内的用户体系。 优势&#xff1a; 利用系统账号的安全…

高效数据分析:五款报表工具助力企业智能决策

概述 报表工具是企业进行数据分析、展示和决策支持的核心工具之一。本文将为大家介绍五款各具特色的报表工具&#xff0c;包括国产的山海鲸报表、FineReport&#xff0c;以及国际工具Databox、Pentaho Reporting和Zoho Analytics。通过详细分析它们的功能特点、优势和不足&…

生态环境一体化智慧监管平台

在数字化和智能化的浪潮中&#xff0c;生态环境保护与治理正迎来革命性的变化。生态环境一体化智慧监管平台的建设&#xff0c;不仅响应了这一趋势&#xff0c;而且为中国式现代化的生态治理提供了新的解决方案。本文将深度分析该平台的建设内容&#xff0c;探讨其在推动生态文…