Shell脚本编程

通过此文记下用到过的或者看到过的shell脚本小模板,持续更新…

注意事项(个人规范)

  • 引用变量使用${var}的方式,字符串用双引号,比如包含换行符的字符串变量必须用echo "${str}"的形式,否则echo ${str}会忽略换行符
  • 命令执行结果赋值给变量个人偏好使用反引号,需要嵌套时才用$()

1. 判断字符串是否包含子串

#! /bin/sh

# 用 =~ 判断是否包含子串

# 定义变量等号两边不能有空格
source_string="How are you, I'm fine, thanks"
target_string="thanks"

# 必须用双中括号,且中括号两边都要有空格
if [[ "${source_string}" =~ "${target_string}" ]]; then
   echo "yes"
else
   echo "no"
fi

2. 使用awk分割字符串

#! /bin/sh

# 使用awk分割字符串
java_path="/usr/local/agent/jdk1.8.0_192/jre/java"

# 获取jdk相对路径 输出jdk1.8.0_192
jdk_relative_path=`echo "${java_path}" | awk -F "/" '{print $5}'`

#获取jdk绝对路径,即JAVA_HOME, /usr/local/agent/jdk1.8.0_192
jdk_absolute_path=`echo "${java_path}" | awk -F "/" '{print $1 "/" $2 "/" $3 "/" $4 "/" $5}'`

3. 获取脚本当前所在的绝对路径

#! /bin/sh

# 输入/usr/local/a.txt,dirname命令输出/usr/local. 输入a.txt,dirname输出 .
# 因此dirname命令得到的不一定是绝对路径,结合cd和pwd可获取绝对路径
# 命令执行结果赋值给变量有两种方式,反引号和$(),反引号不可嵌套,$()可以嵌套
current_absolute_path=$(cd "$(dirname "$0")";pwd)

4. 日志打印函数

function print_msg() {

   # +号左边有空格,右边没空格
   time_info=`date +"%Y-%m-%d %H:%M:%S"`
   echo "${time_info} $1"
}

5. usage函数

function usage() {
   echo "Usage: $0 [options]"
   echo "   --a   a is ..."
   echo "   --b   b is ..."
   echo "   --z   z is ..."
   echo ""
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值