单位建设网站注意点,长城集团建设有限公司网站,wordpress悬浮登录插件,兰州新区城乡建设管理局网站文章目录 Shell脚本学习3函数函数定义及使用函数参数获取函数返回值 重定向输入输出重定向 其他Here Document/dev/null 文件Shell文件包含获取当前正在执行脚本的绝对路径按特定字符串截取字符串 Shell脚本学习3
函数
函数定义及使用
函数可以让我们将一个复杂功能划分成若… 文章目录 Shell脚本学习3函数函数定义及使用函数参数获取函数返回值 重定向输入输出重定向 其他Here Document/dev/null 文件Shell文件包含获取当前正在执行脚本的绝对路径按特定字符串截取字符串 Shell脚本学习3
函数
函数定义及使用
函数可以让我们将一个复杂功能划分成若干模块让程序结构更加清晰代码重复利用率更高。
Shell 函数的定义格式如下
function function_name () {list of commands[ return value ]
}说明
其中function关键字是可选的调用函数只需要给出函数名不需要加括号函数返回值可以显式增加return语句如果不加会将最后一条命令运行结果作为返回值Shell 函数返回值只能是整数一般用来表示函数执行成功与否0表示成功其他值表示失败
如果一定要让函数返回字符串那么可以先定义一个变量用来接收函数的计算结果脚本在需要的时候访问这个变量来获得函数返回值。
#!/bin/bashfunction hello(){echo hello world;
}
str$(hello)
echo $str删除函数也可以使用 unset 命令不过要加上 .f 选项
$unset .f function_name注如果你希望直接从终端调用函数可以将函数定义在主目录下的 .profile 文件这样每次登录后在命令提示符后面输入函数名字就可以立即调用
函数参数
在Shell中调用函数时可以向其传递参数。在函数体内部通过 $n 的形式来获取参数的值例如$1表示第一个参数$2表示第二个参数…这就是前面讲的特殊变量。
#!/bin/bash
function sum(){case $# in 0) echo no param;;1) echo $1;;2) echo expr $1 $2;;3) echo expr $1 $2 $3;;*) echo $# params! Its too much!;;esac
}注意$10 不能获取第十个参数获取第十个参数需要${10}。当n10时需要使用${n}来获取参数。
特殊变量 说明
$# 传递给函数的参数个数。
$* 显示所有传递给函数的参数。
$ 与$*相同但是略有区别请查看Shell特殊变量。
$? 函数的返回值。获取函数返回值
#!/bin/bashfunction sum()
{echo expr 123
}
num$(sum)重定向
输入输出重定向
Unix 命令默认从标准输入设备(stdin)获取输入将结果输出到标准输出设备(stdout)显示。一般情况下标准输入设备就是键盘标准输出设备就是终端即显示器。
命令的输出不仅可以是显示器还可以很容易的转移向到文件这被称为输出重定向。
输出重定向的语法为
command file注输出重定向会覆盖之前文件内容不希望文件内容被覆盖可以使用 追加到文件末尾
输入重定向语法为
command file计算 users 文件中的行数
wc -l users
2一般情况下每个 Unix/Linux 命令运行时都会打开三个文件
标准输入文件(stdin)stdin的文件描述符为0Unix程序默认从stdin读取数据。标准输出文件(stdout)stdout 的文件描述符为1Unix程序默认向stdout输出数据。标准错误文件(stderr)stderr的文件描述符为2Unix程序会向stderr流中写入错误信息。
默认情况下command file 将 stdout 重定向到 filecommand file 将stdin 重定向到 file。
command 2 file # stderr 重定向到 file
command 2 file #stderr 追加到 file 文件末尾
command file 21 # stdout 和 stderr 合并后重定向到 file
command file1 file2 # stdin 和 stdout 都重定向全部可用的重定向命令列表
命令 说明
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 之间的内容作为输入。其他
Here Document
Here Document 是 Shell 中的一种特殊的重定向方式
它的基本的形式如下
command delimiterdocument
delimiter通过 wc -l 命令计算 document 的行数
wc -l EOFThis is a simple lookup programfor good (and bad) restaurantsin Cape Town.
EOF/dev/null 文件
如果希望执行某个命令但又不希望在屏幕上显示输出结果那么可以将输出重定向到 /dev/null
command /dev/null/dev/null 是一个特殊的文件写入到它的内容都会被丢弃如果尝试从该文件读取内容那么什么也读不到。但是 /dev/null 文件非常有用将命令的输出重定向到它会起到禁止输出的效果。
屏蔽 stdout 和 stderr
command /dev/null 21Shell文件包含
Shell 也可以包含外部脚本将外部脚本的内容合并到当前脚本。
Shell 中包含脚本可以使用 . filename 或 source filename 。
两种方式的效果相同简单起见一般使用点号(.)但是注意点号(.)和文件名中间有一空格。
. ./sub.sh
echo $name获取当前正在执行脚本的绝对路径
正确的命令是
basepath$(cd dirname $0; pwd) #保证执行时一定进入了当前文件位置再使用pwd输出按特定字符串截取字符串
截取/www/html/php/myapp/里的myapp
str/www/html/php/myapp/
b($(echo $str|sed s#/# #g))
b_lenexpr ${#b[*]} - 1
app_name${b[$b_len]}
echo $app_name说明
利用sed将字符串按指定字符截成数组然后取最后一个
计算数组长度${#arr[*]}
计算则需要使用expr命令