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 循环语句
使用for
和while
语句来实现循环,例如:
# 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
![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)
最全的Linux教程,Linux从入门到精通
======================
1. **linux从入门到精通(第2版)**
2. **Linux系统移植**
3. **Linux驱动开发入门与实战**
4. **LINUX 系统移植 第2版**
5. **Linux开源网络全栈详解 从DPDK到OpenFlow**
![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)
**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**
> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**