描述:Bash(Bourne Again shell)也跟其他编程语言一样也支持函数,一般在编写大型脚本中需要用到,函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高,像其他编程语言一样,Shell 也支持函数。但是bash作为一种解释性语言,bash 在编程能力方面提供的支持并不像其他编译性的语言(例如 C 语言)那样完善,执行效率也会低很多。
描述:Bash(Bourne Again shell)也跟其他编程语言一样也支持函数,一般在编写大型脚本中需要用到,函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高,像其他编程语言一样,Shell 也支持函数。但是bash作为一种解释性语言,bash 在编程能力方面提供的支持并不像其他编译性的语言(例如 C 语言)那样完善,执行效率也会低很多。
#定义函数 Hello () { echo"Url is http://see.xidian.edu.cn/cpp/shell/" }
funWithReturn(){ echo"The function is to get the sum of two numbers..." echo -n "Input first number: " read aNum echo -n "Input another number: " read anotherNum echo"The two numbers are $aNum and $anotherNum !" return $(($aNum+$anotherNum)) #返回值为整数 }
#调用函数 Hello funWithReturn
ret=$? # Capture(捕获) value returnd by last command echo"The sum of two numbers is $ret !"
#!/bin/bash aa="this is aa"#全局变量 $aa 和 $bb bb="this is bb" functionname() { #定义函数name local cc="this is cc"#定义局部变量$cc local dd="this is dd"#定义局部变量$dd echo$aa, $bb#访问参数1和参数2 echo$cc#打印局部变量
return 10 #shell函数返回值是整形,并且在0~257之间。 }
echo$dd#这里将会打印不生效,因为dd是局部变量。 name #函数调用 echo"函数返回值为:$?"
#执行结果# [返回空值] this is aa, this is bb this is cc 函数返回值为:0
#!/bin/bash funWithParam(){ echo"The value of the first parameter is $1 !" echo"The value of the second parameter is $2 !" echo"The value of the tenth parameter is $10 !" echo"The value of the tenth parameter is ${10} !"#注意获取第10个参数时候的必须采用这样的形式; echo"The value of the eleventh parameter is ${11} !" echo"The amount of the parameters is $# !"# 参数个数 (前面所说的特殊变量) echo"The string of the parameters is $* !"# 传递给函数的所有参数 echo"The string of the Single parameters is $@ !"# 传递给函数的单个参数 } funWithParam 1 2 3 4 5 6 7 8 9 34 73 #注意这里传递给函数的参数
#!/bin/bash #提取文件名或者删除后缀 file_name="text.gif" #从$VAR中删除位于 % 右侧的通配符左右匹配的字符串,通配符从右向左进行匹配,现在给变量 name 赋值,name=text.gif,那么通配符从右向左就会匹配到 .gif,所有从 $VAR 中删除匹配结果 name=${file_name%.*} echo file name is: $name#file name is: test
file_name="text.gif.bak.2012" name=${file_name%.*} name2=${file_name%%.*}# 操作符 %% 使用 .* 从右向左贪婪匹配到 .gif.bak.2012 echo file name is: $name#file name is: test.gif.bak #使用 %,匹配到right到left得第一个"." << echo file name is: $name2#file name is: test #使用 %%,匹配到从left到right得第一个"." >>
file_name="text.gif.bak.2012.txt" suffix=${file_name#*.}# 与 %%.* 结果 相反 suffix2=${file_name##*.}# 与 %.* 结果 相反 echo suffix is: $suffix echo suffix is: $suffix2#操作符 ## 使用 *. 从左向右贪婪匹配到 text.gif.bak.2012 # suffix is: text.gif.bak.2012 使用 # ,取第一小数点开始到结尾的进行匹配 >> # suffix2 is: txt 使用 ## ,取最后一个小数点的suffix(后缀名) <<
实际案例3:
1 2 3 4 5
// ## 取最后 一个 / 到末尾的字符串 // # 取第一个 / 到末尾的字符串 demo=1 for i in $(ls /nas_log/logs/student.log.2021-06-{27,28,29,30}.*.gz);do echo "${i##*/}";demo=$(($demo+1));cp ${i} /tmp/backup/${demo}-${i##*/};done gzip -d student.log.2021-06-30-0.gz
输出说明:
1 2 3 4 5 6
/tmp/backup$ ls | more 1000-student.log.2021-06-30.6 1001-student.log.2021-06-30.7 1002-student.log.2021-06-30.8 1003-student.log.2021-06-30.9 1004-student.log.2021-06-27.0
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主, 将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!