Shell学习笔记2》转载自runnoob
学习且转载地址:http://www.runoob.com/linux/linux-shell-passing-arguments.html
这个网站整理的的确不错,看着很清晰,而且内容也很全面,个人觉得比W3cSchool更接地气哈哈。由于感觉这个网站整理的很好,所以实在没有什么总结的地方,所以照搬很多东西。
1、向脚本内传递参数以及脚本获取参数:
#!/bin/bash
#author zx
echo "Shell param test"
echo "file name is :$0";
echo "param1 is :$1"
echo "param2 is :$2";
echo "param3 is :$3"
运行命令及结果:
root@node9:/home/zhangxu# chmod +x ./testParam.sh root@node9:/home/zhangxu# ./testParam.sh jack rose titan
Shell param test
file name is :./testParam.sh
param1 is :jack
param2 is :rose
param3 is :titan
root@node9:/home/zhangxu#
另外,还有几个特殊字符用来处理参数:
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
详细见:
http://www.runoob.com/linux/linux-shell-passing-arguments.html
2、数组:
#!/bin/bash
#test array
echo "there ihave an array";
array1=(A B 123 "JACK" "ROSE");
echo "index0:${array1[0]}";
echo "index1:${array1[1]}";
echo "index2:${array1[2]}";
echo "index3:${array1[3]}";
echo "index4:${array1[4]}";
echo "all elements :${array1[*]}"
echo "all elements :${array1[@]}"
array1[0]="ACFUN";
array1[1]="BLIBLI";
echo "all elements :${array1[*]}"
echo "all elements amount :${#array1[*]}"
输出:
root@node9:/home/zhangxu# ./testArray.sh
there ihave an array
index0:A
index1:B
index2:123
index3:JACK
index4:ROSE
all elements :A B 123 JACK ROSE
all elements :A B 123 JACK ROSE
all elements :ACFUN BLIBLI 123 JACK ROSE
all elements amount :5
3、运算符:用到时打开网址照着写就行
http://www.runoob.com/linux/linux-shell-basic-operators.html
4、流程控制,也没啥必要,来回那些东西:
http://www.runoob.com/linux/linux-shell-process-control.html
个人觉得下面三个比较重要:
Shell 函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:
[function] funname [()]{ action;[returnint;]}
说明:
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面的例子定义了一个函数并进行调用:
下面定义一个带有return语句的函数:
#!/bin/bash# author:菜鸟教程# url:www.runoob.com funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum))} funWithReturn echo "输入的两个数字之和为 $? !"
输出类似下面:
这个函数会对输入的两个数字进行相加运算...输入第一个数字:1输入第二个数字:2两个数字分别为1和2!输入的两个数字之和为3!
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
带参数的函数示例:
#!/bin/bash# author:菜鸟教程# url:www.runoob.com funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !"} funWithParam 1234567893473
6、输入输出重定向:
Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
重定向命令列表如下:
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
7、文件包含:
Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格或 source filename
实例
创建两个 shell 脚本文件。
test1.sh 代码如下:
#!/bin/bash# author:菜鸟教程# url:www.runoob.com url="http://www.runoob.com"
test2.sh 代码如下:
#!/bin/bash# author:菜鸟教程# url:www.runoob.com#使用 . 号来引用test1.sh 文件../test1.sh # 或者使用以下包含文件代码# source ./test1.sh echo "菜鸟教程官网地址:$url"
接下来,我们为 test2.sh 添加可执行权限并执行:
$ chmod +x test2.sh $ ./test2.sh 菜鸟教程官网地址:http://www.runoob.com
注:被包含的文件 test1.sh 不需要可执行权限。