shell脚本书写规范

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对代码进行检查

posted @ 2019-11-20 15:23  沉下心学习  阅读(823)  评论(0编辑  收藏  举报