shell-函数之参数使用详解

shell-函数之参数使⽤详解

参数的调⽤⽅法

在其他语⾔中,函数参数分为形参和实参,其中,形参是函数定义时就指定的参数;⽽实参是函数被调⽤时才指定的参数(通常放在括号⾥,参数之间⽤逗号隔开)

shell的函数参数⽐较特殊,实际上shell将脚本的参数和函数的参数统⼀处理,怎么调⽤脚本参数就怎么调⽤函数参数。

function_name arg arg1 arg2 ...

function_name是函数名,arg表⽰函数参数,通过空格隔开。

通过位置变量接受函数参数

和shell脚本相同,shell函数通过系统变量获取参数值。

从命令⾏传递给shell函数的参数叫做位置参数,shell会根据参数的位置来接受对应的值。

在shell内部,⽤户可以通过⼀系列的系统变量来获取参数,这些变量的名称都是固定的,⾮常简单,只⽤⼀个字符表⽰,例如$0表⽰脚本名称;$1表⽰传递的第⼀个参数......

常⽤于参数传递的系统变量

变量说明

$nn是⼀个参数,从1开始表⽰参数的位置,例如:$1表⽰第⼀个参数,$2表⽰第⼆个参数

$#命令⾏参数的个数

$0当前shell脚本的名称

$?前⼀个命令或者是函数的返回状态码,0代表执⾏成功,⾮0即失败

$*以”参数1参数2....“的形式将所有函数通过⼀个字符串返回

$@以”参数1“”参数2“....的形式返回每个参数

$_保存之前执⾏的命令的最后的⼀个参数

举个简单的例⼦:

#!/bin/bash

func ()

{

echo "这是第 $2 个参数"

echo "这是第 $4 个参数"

echo "这是第 $1 个参数"

}

func 1 2 3 4输出结果为:

shift移动位置参数

shift命令可以使位置参数向左移。⽐如shift 3表⽰位置参数$4 向左移动三变成 $1,原来的$5现在变成$2,⽽原来的$1、$2、$3丢弃,** 因为$0是脚本名嘛!**。不带参数的shift

命令相当于shift 1。

我们知道,对于位置变量或命令⾏参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数⼀起赋值给变量$*。若要求 Shell 在不清楚位置变量个数的情

况下,依次遍历每个参数然后进⾏相应处理。

例如:

#!/bin/bash

func ()

{

while [ $# -ne 0 ]

do

echo "第⼀个参数为:$1 ,⼀共有$# 个参数"

shift

done

}func 1 2 3 4 5 6

⽤祖传画图来尝试画个⽰意图

Shift 命令还有另外⼀个重要⽤途, Bsh 定义了9个位置变量,从 $1 到 $9,这并不意味着⽤户在命令⾏只能使⽤9个参数,借助 shift 命令可以访问多于9个的参数。

Shift 命令⼀次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令⾏参数后,可以使⽤ shift 9 命令把 $10 移到 $1。

shift会影响系统变量$#的值 _

通过getopts接收函数参数

所有学习Unix或Linux的⼈,都会记得这样⼀句话:命令+参数+选项;例如ls -l,这个“ -l ”也是个参数,只不过这个参数有⼀个前导的连字符。

通过上⾯的步骤已经可以通过$1,$2...获取全部参数,还可以通过$#来获取参数的个数;但是我们的脚本程序不会这么简单,⼀个参数往往有很多的值,根据参数的值执⾏不同的

操作,这时就会⽤到⼀种技术——参数拓展

getopts是bash内嵌的⼀个命令。通过该命令可以获得函数的选项和参数值或者是脚本的命令⾏选项和参数值。语法为:

getopts optstring [args]

optstring包含⼀个被getopts识别的选项名称列表。如果某个选项后⾯跟着⼀个冒号,表⽰可以为该选项提供参数值。同时参数值将被保存到⼀个名称为$OPTARG的系统变量中。

getopts遍历每个选项,将选项名保存到args变量中。

#!/bin/bash

func ()

{

while getopts "a:b:c:" arg

do

case "$arg" in

a)

echo "-a表⽰all全部。。。参数值为; $OPTARG"

;;

b)

echo "-b表⽰返回。。。参数值为: $OPTARG"

;;

c)

echo "-c还没想好。。。参数值为:$OPTARG"

;;

?)

echo "没有找到这条命令。。。。"

exit 1

;;

esac

done

}

func -a "你好" -b "hello" -c "ARE YOU OK?"输出结果为:

间接参数传递

所谓间接参数传递,就是指通过间接变量引⽤来实现函数参数的传递。

⼀个变量的值是另⼀个变量的变量名,则该变量就可以说是间接变量

例如:

var=work

work=job

此时引⽤变量work就可以⽤:

${!var}

举个简单的⽰例:

#!/bin/bash

func (){

echo "$1"

}

var=work #定义变量var的变量值为work

work=job #定义变量work的变量值为job

func $var #将$var作为函数参数

func $work #直接引⽤$work作为函数参数

func ${!var} #使⽤间接参数传递的⽅式调⽤$work的值

work=test #重新定义变量work的值为test

func $var

func ${!var} #再次传递参数试试输出结果为:

全局变量传递

原理很简单,就是通过全局变量的替换来实现参数传递(不建议这样写,因为过段时间可能就只有上帝才能看懂这段代码)

定义⼀个函数判读⽂件是否存在

#!/bin/bash

file="/bin"

func ()

{

if [ -a "$file" ];then

echo "⽂件存在"

else

echo "⽂件不存在"

fi

}

func

file="/asdawdaasf"

func输出结果为:

数组传递参数

将整个数组作为参数传递给函数(将数组中的元素展开,看成是由空格隔开的参数传递给函数)

例如:

#!/bin/bash

array=(a b c d e "f g" )

func ()

{

echo "参数个数为: $# "

while [ $# -gt 0 ]

do

echo $1

shift

done

}

func "${array[@]}"输出结果为

合集下载

sh文件内的函数 -回复

sh文件内的函数 -回复

sh文件内的函数 -回复

如何在shell脚本中定义和使用函数?

函数是shell脚本中的一个重要组成部分。它们允许我们将一组相关的命令和操作封装在一个单一的代码块中,并在需要的时候进行调用。在本文中,我将一步一步地解释如何在shell脚本中定义和使用函数。

1. 函数的定义

在shell脚本中,函数的定义使用`function`关键字或者直接使用函数名作为关键字,后跟圆括号()和花括号({})。下面是一个简单的函数定义的示例:

shell

function hello {

echo "Hello, World!"

}

2. 调用函数

要调用函数,只需使用函数名后跟圆括号即可。以下是如何调用上述示例函数的方法:

shell

hello

调用函数时,shell会执行函数内的所有命令。

3. 函数参数

函数可以接受参数,方法是在函数定义中的圆括号内列出参数的名称。在函数体内,可以使用1,2等变量来引用传递给函数的参数。下面是一个函数接受一个参数并在屏幕上打印出该参数的示例:

shell

function greet {

echo "Hello, 1!"

}

调用这个函数时,我们需要将参数传递给它:

shell

greet "Alice"

这将打印出`Hello, Alice!`。

4. 返回值

函数可以有返回值,通过使用`return`语句设置一个整数返回给调用函数的代码。函数的返回值可以是一个在0到255范围内的整数。下面是一个返回两个数字之和的函数的示例:

shell

function add {

local sum=((1 + 2))

return sum

}

要获取函数的返回值,可以使用`?`变量。以下是如何调用上述示例函数并获得它的返回值:

shell

add 5 3

result=?

echo "The sum is result"

这将打印出`The sum is 8`。

Linux——Shell脚本参数传递的2种方法

Linux——Shell脚本参数传递的2种方法

Linux——Shell脚本参数传递的2种⽅法

前⾔

平时会遇到很多脚本都有参数选项,类似:

./test.sh -f config.conf -v --prefix=/home

这种脚本怎么写呢?

⼀、Shell 特殊参数解释

⾸先来看⼏个特殊变量:$0, $#, $*, $@, $?, $$, $_

⽰例1:新建⼀个test.sh的⽂件

#!/bin/bash

echo $0 # 当前脚本的⽂件名(间接运⾏时还包括绝对路径)。

echo $n # 传递给脚本或函数的参数。n 是⼀个数字,表⽰第⼏个参数。例如,第⼀个参数是 $1 。

echo $# # 传递给脚本或函数的参数个数。

echo $* # 传递给脚本或函数的所有参数。

echo $@ # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下⾯将会讲到。

echo $? # 上个命令的退出状态,或函数的返回值。

echo $$ # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

echo $_ # 上⼀个命令的最后⼀个参数

echo $! # 后台运⾏的最后⼀个进程的 ID 号

执⾏结果如下:

$ ./test.sh test test1 test2 test3 test4

./test.sh # $0

# $n

5 # $#

test test1 test2 test3 test4 # $*

test test1 test2 test3 test4 # $@

0 # $?

12305 # $$

12305 # $_

# $!

$* 和 $@ 都表⽰传递给函数或脚本的所有参数,不被双引号 ("") 包含时,都以"$1""$2" … "$n" 的形式输出所有参数。

但是当它们被双引号 ("") 包含时,"$*"会将所有的参数作为⼀个整体,以"$1 $2 … $n"的形式输出所有参数;"$@"会将各个参数分开,

以"$1""$2" … "$n" 的形式输出所有参数。

shell 命令参数

shell 命令参数

shell 命令参数

Shell命令参数是指在执行一个Shell命令时,可以附加的一些选项或参数,用于改变命令的行为或指定操作的对象。参数通常以短选项(-)或长选项(--)的形式出现。

常见的Shell命令参数包括:

1. 短选项:以单个字母表示,使用短横线(-)作为前缀,后面可以有一个或多个短选项连在一起。例如,`rm -r`表示递归删除目录。

2. 长选项:以单词或短语表示,使用两个短横线(--)作为前缀,并用下划线或连接线分隔单词。长选项通常提供更加可读和易理解的选项。例如,`ls --all`表示显示所有文件,包括隐藏文件。

3. 参数:用于指定命令操作的对象或附加的参数信息。参数通常是命令的最后一个或多个参数。例如,`cp file1 file2`表示将file1复制到file2。

4. 位置参数:是指在执行命令时提供给脚本或命令的额外信息,通常用于配置或自定义命令的行为。位置参数可以是位置的数字或变量名。例如,在一个脚本中使用命令`echo $1`,表示打印出脚本执行时的第一个位置参数。

5. 环境变量:在执行命令时系统默认提供的一些变量,使用特定的名称来访问这些参数。例如,$HOME表示当前用户的主目录。

在执行命令时,可以使用-h、--help参数来查看命令的帮助文档,以了解特定命令支持的参数和选项。

shell 调用函数 并获取返回值

shell 调用函数 并获取返回值

shell 调用函数 并获取返回值

Shell 是一种脚本语言,可以通过调用函数来实现一些特定的功能。在

Shell 中,函数可以返回一个值,这个值可以被其他部分使用。本文将介绍如何在 Shell 中调用函数并获取返回值。

一、定义函数

在 Shell 中定义函数非常简单,只需要使用以下语法:

```

function_name() {

# function body

return value

}

```

其中,function_name 是函数的名称,function body 是函数的主体部分,return value 是函数的返回值。如果函数不需要返回值,则可以省略 return value。

例如,下面是一个简单的函数,用于计算两个数的和:

```

add() {

sum=$(($1 + $2))

return $sum

}

```

这个函数接受两个参数,将它们相加,并将结果存储在变量 sum 中。然后,使用 return 命令将 sum 作为函数的返回值。

二、调用函数

在 Shell 中调用函数也很简单,只需要使用以下语法:

```

function_name arguments

```

其中,function_name 是函数的名称,arguments 是传递给函数的参数。如果函数需要返回值,则可以使用以下语法:

``` result=$(function_name arguments)

```

其中,result 是变量的名称,用于存储函数的返回值。

例如,下面是一个调用 add 函数的示例:

```

result=$(add 2 3)

echo $result

```

这个示例将 2 和 3 作为参数传递给 add 函数,并将返回值存储在变量

result 中。然后,使用 echo 命令输出 result 的值。

三、完整示例

下面是一个完整的示例,用于计算两个数的平均值:

使用Shell脚本进行命令行参数解析的技巧

使用Shell脚本进行命令行参数解析的技巧

使用Shell脚本进行命令行参数解析的技巧

Shell脚本是一种在Unix或Linux系统上编写的脚本语言,它通过命令行界面执行一系列操作。为了增加脚本的灵活性和适应不同的使用场景,我们经常需要在命令行中传递参数给Shell脚本。本文将介绍一些使用Shell脚本进行命令行参数解析的技巧,帮助您更好地利用Shell脚本进行编程和自动化任务。

1. 使用$#获取参数数量

在Shell脚本中,我们可以使用$#来获取命令行中传递的参数数量。例如,如果您的脚本名为script.sh,执行命令如下:

```shell

./script.sh arg1 arg2 arg3

```

那么在脚本中使用$#将返回3,表示有3个参数被传递进来。

2. 使用$*或$@获取所有参数

除了获取参数的数量,我们还可以使用$*或$@来获取所有的命令行参数。这两个变量的区别在于,$*将所有的参数看作一个字符串,而$@将每个参数看作一个独立的字符串。

下面是一个示例,展示了如何使用$*和$@遍历所有的命令行参数:

```shell

for arg in "$*" do

echo $arg

done

```

```shell

for arg in "$@"

do

echo $arg

done

```

3. 使用$0获取脚本名称

有时候,在Shell脚本中需要获取脚本的名称,以便在输出或日志中使用。此时可以使用$0来获取当前脚本的文件名。

下面是一个示例,展示了如何使用$0获取脚本名称并输出:

```shell

echo "当前脚本的名称是:$0"

```

4. 使用$1、$2等获取特定位置的参数 在命令行中传递的参数可以使用$1、$2等来获取。其中$1表示第一个参数,$2表示第二个参数,以此类推。

下面是一个示例,展示了使用$1和$2获取命令行中的特定参数:

```shell

echo "第一个参数:$1"

echo "第二个参数:$2"

shell exec 参数

shell exec 参数

shell exec 参数

shell_exec()是PHP中用于执行shell命令的函数。它接受一个字符串参数,该参数是要在shell中执行的命令,并返回命令的输出作为字符串,或者在失败时返回false。

在使用shell_exec()时,需要注意以下几点:

1. 安全性问题,由于shell_exec()允许执行任意的shell命令,因此需要格外注意安全性。应该避免直接将用户输入的内容传递给shell_exec(),以免受到命令注入攻击。

2. 路径问题,在执行命令时,需要注意命令的路径。如果命令不在系统的PATH中,需要指定完整的路径。

3. 返回值,shell_exec()返回命令的输出作为字符串,因此在处理输出时需要考虑可能的换行符、空格等特殊字符。

4. 权限,在使用shell_exec()执行命令时,需要考虑当前PHP进程的执行权限,确保有足够的权限执行所需的命令。

总之,使用shell_exec()需要谨慎对待,确保安全性和正确性。在处理用户输入时,应该进行严格的验证和过滤,以避免安全漏洞。同时,在编写命令时,需要考虑路径和权限等问题,以确保命令能够正确执行。

VFP中调用其他应用程序的方法

VFP中调用其他应用程序的方法

在 Visual FoxPro(VFP)中调用其他应用程序可以通过使用 Shell

函数或者使用 COM 互操作实现,下面将详细介绍这两种方法。

1. 使用 Shell 函数:

Shell 函数用于在操作系统中执行命令行命令或者启动一个应用程序。通过 Shell 函数可以调用其他应用程序并传递参数。以下是使用 Shell

函数调用其他应用程序的基本步骤:

步骤1:使用 Shell 函数执行命令行命令或者启动一个应用程序。

语法:

```

```

其中

- windowstyle:可选参数,指定打开的窗口样式,如最大化、最小化等。

例如,调用记事本程序(Notepad.exe)并打开一个文本文件可以使用以下代码:

```

Shell("notepad.exe C:\Test.txt", 1)

``` 步骤2:为了获取和处理其他应用程序的返回结果,可以使用 Shell

函数的返回值。

语法:

```

```

其中

- result:是 Shell 函数的返回值,可用于检查命令是否成功执行。

例如,以下代码将返回打开的记事本窗口的句柄:

```

hWnd = Shell("notepad.exe", 1)

```

2.使用COM互操作:

步骤1:创建一个COM对象,该对象可以与其他应用程序进行交互。

例如,下面的代码创建一个与 Microsoft Excel 进行交互的 COM 对象:

```

oExcel = CREATEOBJECT("Excel.Application")

```

步骤2:调用COM对象的方法和属性来实现与其他应用程序的交互。 例如,下面的代码打开一个 Excel 文件:

```

oExcel.Workbooks.Open("C:\Test.xlsx")

```

步骤3:使用完COM对象后,记得将其释放。

例如,下面的代码用于释放 Excel COM 对象:

centos sh 函数 参数

centos sh 函数 参数

Centos sh函数参数使用指南

一、什么是Centos sh函数参数?

在Centos操作系统中,sh函数是一种特殊的函数,用于执行Shell脚本。而函数参数则是在调用函数时传递给函数的值或变量。Centos sh函数参数即是在使用sh函数时所传递的参数。

二、Centos sh函数参数的使用方法

1. 位置参数

位置参数是指在调用函数时,传递给函数的参数按照顺序依次赋值给函数内部的变量。在Centos中,使用$1、$2、$3等特殊变量来表示位置参数。例如,如果有一个函数需要接收两个参数,可以这样定义:

```

function myfunc(){

echo "第一个参数是:$1"

echo "第二个参数是:$2"

}

```

调用函数时,可以传递两个参数:

```

myfunc "参数1" "参数2" ```

这样,函数内部的$1将被赋值为"参数1",$2将被赋值为"参数2"。

2. 命名参数

命名参数是指在调用函数时,通过参数名来传递参数值。在Centos中,可以使用getopts命令来实现命名参数的解析。例如,有一个函数需要接收两个命名参数name和age,可以这样定义:

```

function myfunc(){

while getopts "n:a:" opt; do

case $opt in

n)

name=$OPTARG

;;

a)

age=$OPTARG

;;

\?)

echo "无效的参数:$OPTARG"

;;

esac

done echo "姓名:$name"

ShellExecute的使用

ShellExecute的使用

ShellExecute函数是Windows API中的一个函数,它用于启动一个外部应用程序,并以指定的方式打开指定的文件、网址、目录等。本文将介绍ShellExecute函数的使用方法和常见的参数说明。

```cpp

HINSTANCE ShellExecute

HWND hwnd,

LPCTSTR lpOperation,

LPCTSTR lpFile,

LPCTSTR lpParameters,

LPCTSTR lpDirectory,

INT nShowCmd

```

参数说明:

- hwnd:父窗口的句柄。如果不需要该参数,可以传入NULL。

- lpOperation:要执行的操作,可以是"open"、"edit"、"explore"等。一般情况下使用"open"即可。

- lpFile:要打开的文件、网址或目录的路径。可以是一个绝对路径,也可以是相对路径。

- lpParameters:命令行参数,用于给打开的程序传递额外的参数。 - lpDirectory:要在其中启动应用程序的初始目录。如果为NULL,则使用当前工作目录。

- nShowCmd:表示打开应用程序时的显示方式,可以是SW_SHOW、SW_HIDE等常量。

下面是一个示例代码,展示了如何使用ShellExecute打开一个网址:

```cpp

#include

#include

int main

return 0;

```

除了打开网址,ShellExecute函数还可以用于打开其他类型的文件,例如打开一个文本文件:

```cpp

#include

#include

int main

return 0;

``` 上述代码中,将ShellExecute函数的lpOperation参数设置为"open",lpFile参数设置为"C:\\test.txt",并将nShowCmd参数设置为SW_SHOW,表示以默认方式打开文本文件。

linuxsh参数

linuxsh参数

Linux中的shell是一种用来解释执行命令的程序。在Linux中,最常用的shell是bash(Bourne Again SHell),它是一种功能强大且可定制化的shell。在使用shell时,可以通过给shell传递参数来改变其行为,这些参数称为sh参数。下面是关于Linux sh参数的详细介绍:

2.$0参数:$0表示当前执行的脚本的名称,也称为脚本自身的参数。

3. 位置参数(Positional Parameters):在命令行中给出的参数,称为位置参数。这些参数可以通过变量$1、$2、$3等来访问,分别表示第一个、第二个、第三个位置参数,以此类推。

5.$#参数:$#表示位置参数的数量。可以用它来确定传递给脚本或函数的参数数量。

6.$?参数:$?表示上一个命令或脚本的退出状态。如果脚本或命令执行成功,则该值为0,否则为非零值。

7. 环境变量参数:可以使用参数值来设置或更改环境变量的值。例如,可以使用export命令将参数值设置为环境变量,使其在当前shell及其子shell中可见。

8. 特殊变量参数:有一些特殊变量参数可以用来获取有关当前shell环境的信息。例如,$$表示当前shell的进程ID,$!表示上一个后台进程的进程ID,$USER表示当前用户的用户名等。

9. 字符串操作参数:还有一些参数可以用来操作字符串。例如,${#var}返回给定变量的长度,${var:-default}返回给定变量的值,如果变量未定义,则返回默认值。 10.参数扩展:可以使用花括号运算符来对参数进行扩展。例如,{1..5}将展开为1、2、3、4、5等。

11. 参数替换:可以使用替换运算符对参数进行替换操作。例如,${var/foo/bar}将var中的第一个foo替换为bar。

总结:sh参数在Linux中提供了一种定制shell行为的功能。通过这些参数,可以轻松地处理命令行输入、位置参数、环境变量等,并进行字符串操作和参数替换等。了解和熟练使用这些参数,可以帮助用户更高效地使用Linux系统。

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