Linux 技巧 Bash 参数和参数扩展

您可以对 shell 脚本使用同样的技术,getopts 内置命令可以简化您的任务。要查看此命令的工 作原理,可以考虑清单 5 所示的示例脚本 testopt.sh。
清单 5. testopt.sh 脚本
#!/bin/bash echo "OPTIND starts at $OPTIND" while getopts ":pq:" optname
在表 1 中您会发现,shell 可能将传递参数的列表引用为 $* 或 $@,而是否将这些表达式用引号 引用将影响它们的解释方式。对于上面的函数而言,使用 $*、“$*”、$@ 或 “$@” 输出的结 果差别不大,但是如果函数更复杂一些,就没有那么肯定了,当您希望分析参数或将一些参数传 递给其他函数或脚本时,使用或不用引号的差别就很明显。清单 3 给出了一个函数,用于打印参 数的数量然后根据这四种可选方案打印参数。清单 4 给出了使用中的函数。IFS 默认变量使用一 个空格作为它的第一个字符,因此清单 4 添加了一条竖线作为 IFS 变量的第一个字符,更加清楚 地显示了在 “$*” 扩展中的何处使用这个字符。
表 1. 函数的 Shell 参数
参 目的 数
0, 位置参数从参数 0 开始。参数 0 引用启动 bash 的程序的名称,如果函数在 1, shell 脚本中运行,则引用 shell 脚本的名称。有关该参数的其他信息,比如 2, bash 由 -c 参数启动,请参阅 bash 手册页面。由单引号或双引号包围的字符 ... 串被作为一个参数进行传递,传递时会去掉引号。如果是双引号,则在调用函
此例中的第二个参数 optname 是一个变量名,该变量将接收找到选项的名称。如果预期某个选项 应该拥有一个值,而且目前存在该值,则会把该值放入 OPTARG 变量中。在静默模式下,可能 出现以下两种错误情况。
1. 如果发现不能识别的选项,则 optname 将包含一个 ? 而 OPTARG 将包含该未知选项。 2. 如果发现一个选项需要值,但是找不到这个值,则 optname 将包含一个 : 而 OPTARG 将
我们开始使用上述的选项分析和参数分析函数来构建一个脚本。清单 7 中给出了 testargs.sh 脚 本。
清单 7. testargs.sh 脚本
#!/bin/bash
showopts () { while getopts ":pq:" optname do case "$optname" in "p") echo "Option $optname is specified" ;; "q") echo "Option $optname has value $OPTARG" ;; "?") echo "Unknown option $OPTARG" ;; ":") echo "No argument value for option $OPTARG" ;; *) # Should not occur echo "Unknown error while processing options" ;; esac done return $OPTIND
清单 3. 一个探究参数处理差别的函数
[ian@pinguino ~]$ type testfunc2 testfunc2 is a function testfunc2 () {
echo "$# parameters"; echo Using '$*'; for p in $*; do
echo "[$p]"; done; echo Using '"$*"'; for p in "$*"; do
echo "[$p]"; done; echo Using '$@'; for p in $@; do
echo "[$p]";
done; echo Using '"$@"'; for p in "$@"; do
echo "[$p]"; done }
清单 4. 使用 testfunc2 打印参数信息
如果您需要这样做,可以传递一组参数给 getopts 计算。如果您在脚本中已经使用一组参数调用 了 getopts,现在要用另一组参数来调用它,则需要亲自将 OPTIND 重置为 1。有关更多详细 内容,请参阅 bash 手册或信息页面。
参数扩展
您已经了解了如何将参数传递给函数或脚本以及如何识别选项,现在开始处理选项和参数。如果 在处理选项后可以知道留下了哪些参数,那应该是一种不错的事情。接下来您可能需要验证参数 值,或者为丢失的参数指派默认值。本节将介绍一些 bash 中的参数扩展。当然,您仍然拥有 Linux 或 UNIX 命令(如 sed 或 awk)的全部功能来执行更复杂的工作,但是您也应该了解如何 使用 shell 扩展。
[ian@pinguino ~]$ testfunc a b c 3 parameters abc [ian@pinguino ~]$ testfunc a "b c" 2 parameters abc
Shell 脚本处理参数的方式与函数处理参数的方式相同。实际上,您会经常发现,脚本往往由很多 小型的函数装配而成。清单 2 给出了一个 shell 脚本 testfunc.sh,用于完成相同的简单任务,结 果是要使用上面的一个输入来运行这个脚本。记住使用 chmod +x 将脚本标记为可执行。
包含丢失参数的选项的名称。
如果不是在静默模式,则这些错误将导致一条诊断错误消息而 OPTARG 不会被设置。脚本可能 在 optname 中使用 ? 或 : 值来检测错误(也可能处理错误)。
清单 6 给出了运行此简单脚本的两个示例。
清单 6. 运行 testopt.sh 脚本
[ian@pinguino ~]$ ./testopt.sh -p -q OPTIND starts at 1 Option p is specified OPTIND is now 2 No argument value for option q OPTIND is now 3 [ian@pinguino ~]$ ./testopt.sh -p -q -r -s tuv OPTIND starts at 1 Option p is specified OPTIND is now 2 Option q has value -r OPTIND is now 4 Unknown option s OPTIND is now 5
Linux 技巧: Bash 参数和参数扩展
在脚本中传递和分析参数
级别: 中级
Ian Shields, 高级程序员, IBM
2007 年 7 月 30 日
您是否有时想知道如何对脚本使用参数,以及如何将参数传递给内部函数或其他脚 本?是否需要对参数或选项做一些简单的有效性测试?或者对参数字符串执行一些简 单的析取和替换操作?本文将向您介绍参数的用法和 bash shell 中的各种参数扩展。
传递的参数
函数和 shell 脚本的妙处之一是,通过向单个函数或脚本传递参数 能够使它们表现出不同的行 为。在本节中,您将了解到如何识别和使用传递的参数。
在函数或脚本中,您可以使用表 1 中列出的 bash 特殊变量来引用参数。您可以给这些变量附上 $ 符号的前缀,然后像引用其他 shell 变量那样引用它们。
现在,您可以定义一个简单函数,其用途只是告诉您它所拥有的参数数量并显示这些参数,如清 单 1 所示。
清单 1. 函数参数
[ian@pinguino ~]$ testfunc () { echo "$# parameters"; echo "$@"; } [ian@pinguino ~]$ testfunc 0 parameters
done
getopts 命令使用了两个预先确定的变量。OPTIND 变量开始被设为 1。之后它包含待处理的下 一个参数的索引。如果找到一个选项,则 getopts 命令返回 true,因此常见的选项处理范例使 用带 case 语句的 while 循环,本例中就是如此。getopts 的第一个参数是一列要识别的选项字 母,在本例中是 p 和 r。选项字母后的冒号 (:) 表示该选项需要一个值;例如,-f 选项可能用于 表示文件名,tar 命令中就是如此。此例中的前导冒号告诉 getopts 保持静默(silent)并抑制正 常的错误消息,因为此脚本将提供它自己的错误处理。
@ 位置参数从参数 1 开始。如果在双引号中进行扩展,则每个参数都会成为一个 词,因此 “$@” 与 “$1” “$2” 等效。如果参数有可能包含嵌入空白, 那么您将需要使用这种形式。
# 参数数量(不包含参数 0)。
注意:如果您拥有的参数多于 9 个,则不能使用 $10 来引用第十个参数。首先,您必须处理或保 存第一个参数($1),然后使用 shift 命令删除参数 1 并将所有剩余的参数下移一位,因此 $10 就变成了 $9,依此类推。$# 的值将被更新以反映参数的剩余数量。在实践中,最常见的情 况是将参数迭代到函数或 shell 脚本,或者迭代到命令替换使用 for 语句创建的列表,因此这个 约束基本不成问题。
do case "$optname" in "p") echo "Option $optname is specified" ;; "q") echo "Option $optname has value $OPTARG" ;; "?") echo "Unknown option $OPTARG" ;; ":") echo "No argument value for option $OPTARG" ;; *) # Should not occur echo "Unknown error while processing options" ;; esac echo "OPTIND is now $OPTIND"
合集下载

linux bash 写法

linux bash 写法

linux bash 写法Linux Bash写法1. 概述Linux Bash是一种命令行工具,用于在Linux操作系统下执行各种命令和脚本。

本文将介绍一些常见的Linux Bash写法,包括变量定义、条件判断、循环语句以及函数定义等。

2. 变量定义在Bash中,可以使用等号来定义变量,例如:```bashname="John"age=25```也可以使用读取命令的方式定义变量:```bashread -p "请输入您的姓名:" nameecho "您的姓名是:$name"```使用$符号可以获取变量的值,例如:echo "姓名:$name,年龄:$age"```3. 条件判断在Bash中,可以使用if语句进行条件判断,例如:```bashif [ $age -gt 18 ]; thenecho "成年人"elseecho "未成年人"fi```在if语句中,可以使用-eq、-ne、-lt、-le、-gt、-ge等运算符进行数值比较,也可以使用=、!=、-z、-n等运算符进行字符串比较。

4. 循环语句Bash提供了多种循环语句,包括for、while和until等。

4.1 for循环for循环用于遍历列表或者数字范围,例如:for fruit in apple orange bananadoecho "水果:$fruit"done```也可以使用seq命令来生成数字范围:```bashfor i in $(seq 1 5)doecho "数字:$i"done```4.2 while循环while循环用于在条件满足时执行循环体,例如:```bashcount=1while [ $count -le 5 ]doecho "计数:$count"((count++))done```4.3 until循环until循环与while循环相反,当条件为假时执行循环体,例如:```bashcount=1until [ $count -gt 5 ]doecho "计数:$count"((count++))done```5. 函数定义在Bash中,可以自定义函数以便重复使用,例如:```bashgreet() {echo "Hello, $1!"}```调用函数时,可以传递参数给函数:```bashgreet "John"```6. 脚本执行将上述写法保存为一个脚本文件(例如script.sh),并使用chmod 命令使其可执行:```bashchmod +x script.sh```然后可以使用./命令执行脚本:```bash./script.sh```也可以使用bash命令执行脚本:```bashbash script.sh```7. 总结本文介绍了Linux Bash中一些常见的写法,包括变量定义、条件判断、循环语句和函数定义等。

linux bash 参数

linux bash 参数

linux bash 参数
在Linux系统中,Bash作为默认的shell,其参数的运用非常重要。

下面介绍几个常见的Bash参数:
1. -c:执行命令字符串,例如:bash -c 'ls'
2. -e:一旦有命令返回非零状态码就退出,例如:bash -e 'ls /notexist'
3. -n:检查脚本语法错误,例如:bash -n script.sh
4. -v:输出命令执行的详细信息,例如:bash -v script.sh
5. -x:输出命令执行的详细信息,并且在执行每个命令之前先将其打印出来,例如:bash -x script.sh
6. -u:对未定义变量进行检查,例如:bash -u 'echo $hello'
7. --:用于明确指示命令行参数的结束,例如:bash script.sh -- --filename
除了上述的参数外,还有其他一些有用的参数,可以通过man bash命令查看。

- 1 -。

bash教程

bash教程

bash教程Bash是一个常用的命令行shell,适用于Linux和macOS操作系统。

它提供了一种与计算机交互的方法,可以执行命令、编辑文件和处理数据等操作。

下面是一些常用的Bash命令和技巧,供参考:1. 认识BashBash是Bourne Again SHell的缩写,是Unix的一个自由软件,是Linux和macOS默认的shell。

2. 查看当前所在路径使用`pwd`命令可以查看当前所在路径。

比如输入`pwd`后回车,你将看到当前所在路径的完整名称。

3. 列出文件和文件夹使用`ls`命令可以列出当前路径下的文件和文件夹。

比如输入`ls`后回车,你将看到当前路径下的所有文件和文件夹的名称。

4. 切换路径使用`cd`命令可以切换路径。

比如输入`cd /path/to/folder`后回车,你将切换到指定路径。

5. 创建文件夹使用`mkdir`命令可以创建文件夹。

比如输入`mkdir foldername`后回车,你将在当前路径下创建一个名为"foldername"的文件夹。

6. 创建文件使用`touch`命令可以创建文件。

比如输入`touch filename`后回车,你将在当前路径下创建一个名为"filename"的空文件。

7. 复制文件和文件夹使用`cp`命令可以复制文件和文件夹。

比如输入`cp file1file2`后回车,你将复制名为"file1"的文件并将其重命名为"file2"。

8. 移动文件和文件夹使用`mv`命令可以移动文件和文件夹。

比如输入`mv file1 /path/to/destination`后回车,你将把名为"file1"的文件移动到指定路径下。

9. 删除文件和文件夹使用`rm`命令可以删除文件和文件夹。

比如输入`rm file1`后回车,你将删除名为"file1"的文件。

bash 用法

bash 用法

bash 用法Bash(Bourne Again SHell)是一种流行的Unix shell,它是许多Linux和macOS系统的默认shell。

Bash提供了丰富的功能,包括命令行编辑、命令历史、别名、函数、作业控制等。

以下是Bash的一些基本用法:命令行编辑:Bash允许用户使用箭头键在命令行上移动,以便更正或修改命令。

还可以使用Tab键进行命令和文件名的自动补全。

命令历史:Bash会记住用户输入的命令,并允许用户通过按上/下箭头键来浏览这些命令。

用户还可以使用history命令查看命令历史记录。

别名:Bash允许用户为命令创建别名,以便用更短或更具描述性的名称来调用它们。

例如,alias ll='ls -l'会创建一个名为ll的别名,该别名将调用ls -l命令。

变量:Bash允许用户定义和使用变量。

例如,name="John"将创建一个名为name的变量,并将其设置为"John"。

用户可以通过在变量名前加上$符号来引用变量的值,如echo $name。

输入/输出重定向:Bash允许用户将命令的输出保存到文件中,或者将文件的内容作为命令的输入。

例如,command > file将命令的输出保存到file文件中,而command < file 则将file文件的内容作为命令的输入。

条件语句和循环:Bash提供了if、while、for等语句,允许用户根据条件执行不同的命令或重复执行同一组命令。

函数:Bash允许用户定义自己的函数,并在需要时调用它们。

函数是一组命令的集合,可以像单个命令一样被调用。

这只是Bash的一些基本用法。

Bash还提供了许多高级功能和选项,可以满足各种复杂的命令行需求。

要了解更多关于Bash的信息,建议参考Bash的官方文档或相关的学习资源。

linux bash 变量 循环 输入参数

linux bash 变量 循环 输入参数

linux bash 变量循环输入参数摘要:1.Linux Bash简介2.Bash变量及其作用3.循环在Bash中的使用4.输入参数的获取与处理正文:Linux是一个基于Unix的开源操作系统,Bash是Linux系统中最常用的Shell。

Bash具有强大的功能,可以进行各种复杂的操作。

本文将介绍Bash中的变量、循环和输入参数相关知识。

1.Linux Bash简介Bash是一个强大的命令行解释器,它可以对命令进行解释和执行。

Bash 支持命令历史、自动补全、条件语句、循环等多种高级功能。

Bash还具有强大的变量扩展功能,可以对变量进行各种操作。

2.Bash变量及其作用在Bash中,变量主要用于存储数据。

变量可以分为系统变量和用户自定义变量。

系统变量是由系统定义的,例如:PATH、HOME等。

用户自定义变量是用户根据需要创建的,例如:`my_variable=“Hello World!”`。

在Bash 中,可以使用`echo`命令查看变量值,也可以使用`${变量名}`的方式引用变量。

3.循环在Bash中的使用循环是Bash中非常重要的一部分,它可以帮助我们重复执行一段代码。

在Bash中,有两种循环:for循环和while循环。

for循环主要用于遍历序列,例如:`for i in 1 2 3 4; do echo $i; done`。

while循环主要用于满足某个条件时重复执行,例如:`count=0; while [ $count -lt 4 ]; do echo $count; count=$((count+1)); done`。

4.输入参数的获取与处理在Bash脚本中,我们可以通过参数传递数据。

使用`#! /bin/bash`作为脚本的第一行,即可使脚本以交互方式运行。

在脚本中,可以使用`read`命令获取用户输入的参数,例如:`read -p "请输入一个数字:" num`。

BASH命令详解

BASH命令详解

history [-r|w|a|n] [filename]
这种形式中,-r 选项告诉 history 命令读命令历史列表文件的内容并且把它们当作当前的命令历史列表。-w 选项将把当前的命令历史记录写入文件中并覆盖文件原来的内容。-a 选项把当前的命令历史记录追加到文件中。-n 选项将读取文件中的内容并加入到当前历史命令列表中。如果 filename 选项没有被指定,history 命令将用变量HISTFILE 的值来代替。
help: 显示bash内部命令的帮助信息。
kill: 终止某个进程。
pwd: 显示当前工作目录。
unalias: 删除已定义的别名。
bash 还有许多命令,但这些是最常用的,想了解更详细的情况,请参考bash的手册--在提示符下键入 man bash。
bash 变量
bash 把你先前输入的命令文本保存在一个历史列表中。当你用你的帐号登录后历史列表将根据一个历史文件被初始化。历史文件的文件名被一个叫 HISTFILE 的 bash变量指定。历史文件的缺省名字是 .bash_history。这个文件通常在你的用户目录中。(注意该文件的文件名以一个句号开头,这意味着它是隐含的,仅当你带 -a 或 -A参数的 ls 命令列目录时才可见)
另外你还可以用特殊的字符来定义你的提示符,下面的列表列出了最常用的特殊字符。
字符
含义
!
显示该命令的历史记录编号。
# 显示当前命令的命令编号。
$ 显示$符作为提示符,如果用户是root的话,则显示#号。
显示反斜杠。
d 显示当前日期。
10. 用户化配置bash
为了保存这些用户化配置,必须把它们保存到一个bash的初始化文件里。 你能把任何想每次进入bash都执行的命令放到初始化文件里。这个文件里最常见到的命令通常是alias和变量的初始化。bash的初始化文件叫做 profile。每个使用bash的用户都有一个 .profile文件在他的用户目录里。bash在每次启动时都读取这个文件,并执行所有包含的命令。

Bash 语法

这些表达式也可以单独用命令test来计算,比如:
$ test 5 -ge 4
$ echo $?
0
其中$?是上一个命令的返回结果。Test命令的返回结果,0表示结果是True或者命令运行成功;1表示结果是False或者命令运行不成功。
布尔运算
运算表达式可以用布尔运算连接起来,比如于(&&)、或(||)。
$ ./watch-arguments.sh good job
script file name : ./watch-arguments.sh
first argument : good
second argument : job
其他的自带变量见Bash Scripting Tutorials - Variable中的other special variables。
阅读其他人脚本时,经常能够看到export <var_name>=<var_value>这样的用法。那么export和普通变量赋值有什么区别?请看下面的例子
$ some_var='kk'
$ echo $some_var
kk
$ python -c 'import os; import sys;print os.environ.get(sys.argv[1])' some_var # 直接在shell中赋值的变量,子进程不可见
cp $filename ${filename}_bakup
也可以内嵌在字串中:
$ echo "837 is so ${des}"
837 is so awesome and cool
⚠️注意:Bash中的单引号和双引号都用来表示字串。一个重大的差别是,在双引号中变量会展开,但是在单引号中不会。更多差别见Double Quotes。

linux中bash的用法

linux中bash的用法
Linux中的Bash是一种强大的命令行解释器,可以让用户通过键入命令来控制操作系统。

以下是一些Bash的常用用法:
1. 切换目录:使用cd命令可以进入到指定的目录中。

2. 列出文件:使用ls命令可以列出当前目录下的所有文件。

3. 复制文件:使用cp命令可以将一个文件复制到另一个位置。

4. 移动文件:使用mv命令可以将一个文件移动到另一个位置。

5. 删除文件:使用rm命令可以删除一个文件。

6. 创建目录:使用mkdir命令可以创建一个新的目录。

7. 查看文件内容:使用cat命令可以查看一个文件的内容。

8. 编辑文本文件:使用vi或vim命令可以打开一个文本文件进行编辑。

9. 查看进程列表:使用ps命令可以查看当前运行的所有进程。

10. 杀死进程:使用kill命令可以结束一个进程的运行。

以上是Bash的一些基本用法,随着在Linux系统中的使用,用户可以更深入地了解和了解如何在命令行中完成更多的任务。

- 1 -。

bash 传递参数

bash 传递参数Bash脚本是一种运行在Unix和Linux系统上的命令行解释器,它可以用来执行一系列的命令和脚本。

通过传递参数给Bash脚本,我们可以实现更加灵活和定制化的功能。

本文将从不同的角度讨论如何使用Bash脚本传递参数,并展示它们的应用场景。

一、位置参数传递在Bash脚本中,位置参数是指传递给脚本的参数列表。

位置参数可以通过特殊变量$1、$2、$3等来引用,其中$1表示第一个参数,$2表示第二个参数,依此类推。

通过这种方式,我们可以将参数传递给脚本,并在脚本中进行处理。

例如,我们可以编写一个脚本来计算两个数的和。

首先,我们需要在命令行中输入两个数作为参数,然后在脚本中使用$1和$2来获取这两个参数,最后将它们相加并输出结果。

```bash#!/bin/bashsum=$(($1 + $2))echo "两个数的和是:$sum"```在执行这个脚本时,我们需要在命令行中输入两个数,例如:```bash$ ./sum.sh 5 3```这样就会输出两个数的和为8。

通过这种方式,我们可以根据具体的需求,传递不同的参数给脚本,从而实现不同的功能。

二、命令行选项传递除了位置参数,我们还可以使用命令行选项来传递参数。

命令行选项通常以"-"或"--"开头,并且可以有一个或多个字母或单词组成。

在Bash脚本中,我们可以使用getopts命令来解析命令行选项,并获取其对应的参数值。

例如,我们可以编写一个脚本来统计文件的行数和字数。

首先,我们需要定义两个选项:"-l"表示统计行数,"-w"表示统计字数。

然后,我们可以使用getopts命令来解析这两个选项,并在脚本中进行相应的处理。

```bash#!/bin/bashlines=0words=0while getopts "lw" opt; docase $opt inl)lines=$(wc -l < $OPTARG)echo "文件的行数是:$lines";;w)words=$(wc -w < $OPTARG)echo "文件的字数是:$words";;)echo "无效的选项"exit 1;;esacdone```在执行这个脚本时,我们可以使用"-l"选项来统计行数,使用"-w"选项来统计字数,例如:```bash$ ./count.sh -l file.txt```这样就会输出文件的行数。

bash命令参数

bash命令参数
Bash是一个流行的基于文本的shell解释器,主要用于在Linux 和Unix操作系统上执行命令。

Bash支持许多参数来帮助用户更好地控制和管理命令的行为。

本文将介绍一些常用的Bash命令参数。

1. -a:将命令的输出附加到文件的末尾而不覆盖原有内容。

2. -c:从字符串中读取命令并执行。

3. -e:如果命令的退出状态为非零,则立即退出脚本。

4. -f:禁止使用文件名扩展功能。

5. -h:显示命令的帮助信息。

6. -i:交互式执行命令。

7. -n:检查脚本中的语法错误而不执行脚本。

8. -q:安静模式,禁止显示命令的输出。

9. -r:使变量成为只读变量。

10. -s:从标准输入读取命令并执行。

以上是一些常用的Bash命令参数,它们可以帮助用户更好地控制和管理命令的行为。

熟练掌握这些参数可以让你更加高效地使用Bash。

- 1 -。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档