Linux【脚本 04】Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明_linux sh 参数

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Shell脚本是一种命令语言,可以用于自动化执行各种任务。在脚本中,我们可以通过参数来传递信息,这样脚本就可以根据这些信息来执行特定的操作。本文将介绍如何在shell脚本中传递参数,包括位置参数、特殊变量、环境变量和命名参数。

1.Shell基础知识

1.1 解释器

#!/bin/bash 称为shebang或sha-bang、hashbang。是一个特殊的字符序列,由井号“#”和叹号“!”组成,放在脚本文件的第一行开头。在Linux和类Unix操作系统中,这个字符序列用于指定脚本文件的解释器路径。当一个脚本文件的第一行包含了shebang,操作系统在执行该文件时会将该路径后的所有参数传递给指定的解释器,让它来解释执行该脚本。

当系统运行一个脚本时,首先会检查脚本的shebang行,然后找到指定的解释器,并把脚本传递给它执行。如果shebang行不存在或格式不正确,系统会将脚本视为普通文本文件,并无法执行脚本。常见的解释器包括Bash shell、Python、Perl等,可以使用对应的路径来指定解释器。例如,#!/usr/bin/python 表示使用Python解释器来执行脚本。

如果一个文件没有shebang行,系统就不知道用哪个解释器来执行它。此时,如果这个文件具有可执行权限(例如755),系统会把它作为一个shell脚本来执行,使用的是默认的shell解释器(在大多数Unix/Linux系统中,这是Bash shell)。

Shell脚本是一种编程语言,可以用于在Unix/Linux系统上编写自动化任务,批量处理数据,系统管理等。下面是Shell脚本的基础知识:

1.2 变量

用于存储数据,可以使用=来赋值,例如name="kite"

1.3 参数

Shell脚本可以接收命令行传入的参数,使用$1$2等变量来引用,例如$1表示第一个参数。这部分第二章会详细举例。

1.4 条件语句

使用if语句来实现条件判断,例如:

# 脚本内容script.sh【使用位置参数】
#!/bin/bash
if [ $1 -gt 18 ]; then
    echo "You are an adult."
else
    echo "You are not an adult yet."
fi
# 脚本调用
./script.sh 19

1.5 循环语句

使用forwhile语句来实现循环,例如:

# for语句
for i in 1 2 3 4 5; do
    echo $i
done

# while语句【使用了变量】
i=0
while [ $i -lt 10 ]; do
    echo $i
    i=$((i+1))
done

1.6 函数

使用function()定义函数,例如:

# 注意函数的定义和调用都是在脚本内部的
function sayHi {
    echo "Hello, $1!"
}
sayHi "Kite"

1.7 输入输出

使用echo命令输出文本,使用read命令读取用户输入,例如:

# read 命令会等待输入
echo "What's your name?"
read name
echo "Hello, $name!"

1.8 命令执行

使用反引号或美元符来执行命令,并将结果赋值给变量,例如:

today=`date +%Y-%m-%d`
echo "Today is $today"

1.9 运算符

Shell脚本支持算术运算、字符串运算和逻辑运算,例如:

# 算术运算
num=$((1+2))
echo $num

# 字符串运算
if [ "$name" == "John" ]; then
    echo "Hello, John!"
fi

# 逻辑运算
if [ $age -gt 18 ] && [ $gender == "male" ]; then
    echo "You are a man."
fi

以上是Shell脚本的基础知识,掌握了这些知识可以编写简单的脚本来自动化执行任务,进一步学习可以掌握Shell脚本的高级用法,例如正则表达式、管道、重定向、进程控制等。

2. 参数传递

2.1 位置参数

在shell脚本中,可以使用位置参数来传递信息。可以使用$1、$2、$3等来访问它们。例如:

#!/bin/bash
echo "The first argument is $1"
echo "The second argument is $2"

在命令行中执行该脚本时,可以传递两个参数,如下所示:

$ ./script.sh hello world

输出:

The first argument is hello
The second argument is world

2.2 特殊变量

shell提供了许多特殊变量来传递额外的信息,例如:

  • $0:表示脚本名称。
  • $#:表示传递给脚本的参数个数。
  • $@:表示所有传递给脚本的参数的列表。
  • $?:表示上一个命令的返回值。

这也解释了为什么位置参数是从1开始的了,$0经常用在日志里,说明当前执行的脚本名称。

例如:

#!/bin/bash
echo "The script name is $0"
echo "The number of arguments is $#"
echo "The arguments are $@"
echo "The return value of the last command is $?"

在命令行中执行该脚本时,可以传递任意个数的参数,如下所示:

$ ./script.sh a b c

输出:

The script name is ./script.sh
The number of arguments is 3
The arguments are a b c
The return value of the last command is 0

2.3 环境变量

可以使用环境变量来传递信息。在shell脚本中,可以使用$VAR的形式来访问环境变量。例如:

#!/bin/bash
echo "The value of HOME is $HOME"
echo "The value of PATH is $JAVA\_HOME"

在命令行中执行该脚本时,输出环境变量的值,如下所示:

$ ./script.sh
The value of HOME is /root
The value of PATH is /usr/local/java/jdk1.8.0_241

在脚本里获取环境变量,可对执行环境进行检验。

2.4 命名参数
2.4.1 getopts

getopts是Bash shell自带的命令行参数处理工具,它的语法比较简单,只支持处理单个字母选项,例如-a-b等。getopts只能处理短选项,也就是只能使用一个字母来表示选项,如果要处理长选项,需要编写更多的代码。另外,getopts处理命令行参数时会把选项和参数分别处理,不能处理连续的选项,例如-abc

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

UBTMm-1715846344786)]
[外链图片转存中…(img-ZWGCyE3r-1715846344786)]
[外链图片转存中…(img-GksGHttW-1715846344786)]
[外链图片转存中…(img-Jiqow69p-1715846344787)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值