N年后的第一更,这里主要记录一些平时自己不太注意的点
1. shell脚本开头要注明解释器,并且推荐下面这种方式:
#!/usr/bin/env bash
2. 一行代码太长,需要用 “\” 进行分行,看起来更美观
./configure \ -prefix=/usr \ -sbin-path=/usr/sbin/nginx \ -conf-path=/etc/nginx/nginx.conf
3. 在脚本中获取外部命令返回值的正确方式:
Num=$(wc -l FileName.txt|awk '{print $1}')
4. 在定义函数时,最好对函数的输入输出类型做注释
[] <- () # 输入空,输出空 [String] <- (var1: String, var2: String) # 输入两个字符型变量,输出字符型 [Boolean] <- (var1: String, var2: Int) # 输入字符型变量1,整型变量2,输出布尔值 [] <- (var1: String)
例如:
#[string] <- (string)
Test(){
Name=$1
echo "Hello! My Name is:" ${Name}
}
5. 一般用于外部调用的函数,用function定义;如果仅脚本内部使用,建议不加function关键词
# 通常情况下用于外部调用 function External(){ XXXX } # 通常情况下仅脚本内使用 Internal(){ XXXX }
6. 在函数内部定义变量时,尽量使用local进行定义,限制变量作用范围
func(){ local var=2 echo ${var} }
7. shell脚本函数返回值只能是整数,string类型的返回值是会报错的;
通常情况下整数推荐使用echo;Boolean类型推荐使用return;
获取函数返回值可以使用return或者在函数内用echo
func(){ echo "Nothing print" } Info=$(func) echo "This is from Func ${Info}."
# 或者使用return返回,在获取返回值时,只能用 $? 进行捕获
func(){ local var=2 return ${var} } func echo "Function return value is:" $?
8. shell函数调用
调用外部脚本中的函数之前,需要先source一下脚本,推荐使用相对路径!(source脚本时,会将脚本中的全局变量、函数加载到当前脚本中)(外部调用的函数,在定义时最好使用function定义)
在脚本内部执行外部脚本: bash + 脚本名称
#!/usr/bin/env bash
source ./../../BaseShell/Log/BaseLog.sh function f1(){ echo "I am f1" }
function main(){ log_info "LINENO:${LINENO} 开始执行" #调用 ./../../BaseShell/Log/BaseLog.sh 中的函数,需要先用source BaseLog.sh f1 #在函数内部调用当前脚本内的函数 log_success "LINENO:${LINENO} 结束执行" #调用 ./../../BaseShell/Log/BaseLog.sh 中的函数 }
main #在脚本内部调用当前脚本内的函数 bash ChangBaiShanFetcher.sh #执行其他脚本 bash ChangBaiShanFetcher.sh main #执行其他脚本的main方法,前提是 ChangBaiShanFetcher.sh 脚本 支持按函数名调用
9. 会使用shellcheck对代码进行检查