前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell脚本常用片段

Shell脚本常用片段

作者头像
十毛
发布2019-03-27 15:28:36
8100
发布2019-03-27 15:28:36
举报

shell脚本时不时就要用到,但是一些常用的片段却没有记住,这里整理一个笔记

常用片段

普通

  • 文件所在目录
代码语言:javascript
复制
CUR_DIR="$(dirname $0)"

基本每个脚本都要用到,否则脚本执行的时候就容易受到当前目录的影响,可能出现执行结果不一致

  • if-elif-fi
代码语言:javascript
复制
if condition; then
    commands;
elif condition; then
    commands;
fi

时间相关

  • 当前时间
代码语言:javascript
复制
date +%Y%m%d%H%M%S
  • 纪元秒
代码语言:javascript
复制
# 纪元秒,方便用来实现简单的计时
date +%s

start=$(date +%s)
sleep 2
end=$(date +%s)

echo $[ end - start ]
  • 计时(毫秒)
代码语言:javascript
复制
function getTiming(){
    start=$1
    end=$2

    start_s=`echo $start| cut -d '.' -f 1`
    start_ns=`echo $start| cut -d '.' -f 2`
    end_s=`echo $end| cut -d '.' -f 1`
    end_ns=`echo $end| cut -d '.' -f 2`

    time_micro=$(( (10#$end_s-10#$start_s)*1000000 + (10#$end_ns/1000 - 10#$start_ns/1000) ))
    time_ms=`expr $time_micro/1000  | bc `

    echo "$time_micro microseconds"
    echo "$time_ms ms"
}

begin_time=`date +%s.%N`
sleep 1
end_time=`date +%s.%N`

getTiming $begin_time $end_time

文件/目录判断

  • 文件是否存在
代码语言:javascript
复制
if [ -f $file ]; then
    echo "$file exists"
else
    echo "$file does not exists"
f
  • 目录是否存在
代码语言:javascript
复制
if [ -d $dir ]; then
    echo "$dir exists"
else
    echo "$dir does not exists"
fi

数组操作

  • 数组遍历
代码语言:javascript
复制
appIds=(1 2 3 4 5 100)
for appId in ${appIds[@]}
do
    echo "${appId}"
done
  • 数组长度
代码语言:javascript
复制
length=${#fileArray[@]}

参数操作

  • 参数判断
代码语言:javascript
复制
if [ ! -n "$1" ]; then
    echo "need one parameter"
else
    echo "parameter is $1"
fi

数值运算

代码语言:javascript
复制
let newNum=$num+100

生成连续数字

代码语言:javascript
复制
rm -rf all-808{1..9}.log
#生成连续IP地址
'%s,' 192.168.58.{1..255}

注意事项

  • 变量赋值时:等号两边不能有空格,有空格就相当于逻辑判断了

最佳实践

  • 脚本首行:#!/usr/bin/env bash
  • 几乎所有的大佬都推荐在使用"$"来获取变量的时候最好加上双引号。
  • 尽量使用func(){}来定义函数,而不是func{}
  • 尽量使用[[]]来代替[]
  • 尽量使用$()将命令的结果赋给变量,而不是反引号
  • 在复杂的场景下尽量使用printf代替echo进行回显
  • 静态检查工具shellcheck
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用片段
    • 普通
      • 时间相关
      • 文件/目录判断
      • 数组操作
      • 参数操作
      • 数值运算
      • 生成连续数字
      • 注意事项
      • 最佳实践
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档