Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Shell脚本常用片段

Shell脚本常用片段

作者头像
十毛
发布于 2019-03-27 07:28:36
发布于 2019-03-27 07:28:36
87100
代码可运行
举报
运行总次数:0
代码可运行

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

常用片段

普通

  • 文件所在目录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CUR_DIR="$(dirname $0)"

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

  • if-elif-fi
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if condition; then
    commands;
elif condition; then
    commands;
fi

时间相关

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

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

echo $[ end - start ]
  • 计时(毫秒)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
if [ -f $file ]; then
    echo "$file exists"
else
    echo "$file does not exists"
f
  • 目录是否存在
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if [ -d $dir ]; then
    echo "$dir exists"
else
    echo "$dir does not exists"
fi

数组操作

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

参数操作

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

数值运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let newNum=$num+100

生成连续数字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
40 个简单又有效的 Linux Shell 脚本示例
历史上,shell 一直是类 Unix 系统的本地命令行解释器。它已被证明是 Unix 的主要功能之一,并发展成为一个全新的主题。Linux 提供了各种功能强大的 shell,包括 Bash、Zsh、Tcsh 和 Ksh。这些外壳最令人惊讶的特性之一是其可编程性。创建简单而有效的 Linux shell 脚本来处理日常工作非常容易。
SQL数据库开发
2024/04/24
5040
40 个简单又有效的 Linux Shell 脚本示例
Shell-实际业务操作01
#!/bin/sh ############################## ## 名称: MvOtherCdrTo251.sh ## 描述: /ocs/data/output目录下的25开头(251,257,258除外)对应目录下的/normal/bak下的文件 全部转移到/ocs/data/output/251/normal/bak ## 参数: 暂无 ## 作者: 小工匠 ## 日期: 2017-06-17 ## 版本:V1.0 ## 备注:使用时注意修改TARGET_MENU的值,测试用,取的是
小小工匠
2021/08/16
2000
Shell-实际业务操作02
文章目录 #!/bin/sh ############################## ## 名称: MvCdr4Classify.sh ## 描述: 将/ocs/data/output/251/
小小工匠
2021/08/16
2090
你应该要掌握的34个运维常用Shell脚本!
(15)编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机
入门笔记
2022/06/03
1.7K0
每日shell练习题
(63)需求: –监控节点 一个网站,使用了cdn,全国各地有几十个节点。需要你写一个shell脚本来监控各个节点是否正常。 假如: 监控的url为www.aming.com/index.php 源站ip为88.88.88.88 以及各个节点ip列表文件为/tmp/ip.txt #!/bin/bash url="www.aming.com/index.php" s_ip="88.88.88.88" curl -x $s_ip:80 $url > /tmp/source.html 2>/dev/null fo
老七Linux
2018/05/31
4.8K0
101个shell脚本
emm。。这个脚本是因为tomcat没有自带的能够给service开机启动的脚本,我就琢磨着自己写了一个简单的启动脚本,如下:
端碗吹水
2020/09/23
1.4K0
101个shell脚本
非常实用的常用Linux运维Shell脚本
废柴阿尤
2023/12/18
3530
[不定期更新]简单的shell脚本练习实例
此文将整理一些简单实用、有趣易学的 shell 练习脚本,希望可以帮到一些想学习 shell 的初学者。张戈也会在闲暇时间不定期更新此文,对已有实例进行改进和注释,增强可读性和易懂性。当然我也会不定期的添加更多简单、有趣且实用的 shell 练习脚本,帮助一些有需要的入门学习者。 一、编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息。 原文代码为: #!/bin/bash if  ! grep "^#!" $1 &>/dev/null; then cat >> $1 <<
张戈
2018/03/23
3.4K0
9个常用的Shell脚本
1、Dos 攻击防范(自动屏蔽攻击 IP)#!/bin/bashDATE=$(date +%d/%b/%Y:%H:%M)LOG_FILE=/usr/local/nginx/logs/demo2.access.logABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; do    if [ $(iptables -vnL
星哥玩云
2022/06/25
1810
10 个实战与面试【常用 Shell 脚本】编写
5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。
昱良
2019/06/19
4710
Linux Shell脚本经典案例
10.并发从数台机器中获取 hostname,并记录返回信息花 费的时长,重定向到一个文件 hostname.txt 中,在全部 完成后输出花费时长最短的那台机器的 CPU 信息。
用户7741497
2022/03/24
9430
Linux Shell脚本案例
1.Dos攻击防范(自动屏蔽攻击IP) #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) LOG_FILE=/usr/local/nginx/logs/demo2.access.log ABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>10)print i}') for IP in $ABNORMAL_IP; do if [ $(iptabl
用户7741497
2022/03/01
1.3K0
LINUX脚本使用实战,持续更新
结果测试 [root@zabbix shell]# sh checkurl.sh www.baidu.com www.baidu.com url [ 确定 ]
cuijianzhe
2022/06/14
2K0
LINUX脚本使用实战,持续更新
shell-编写shell脚本所需的基础语法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
洋仔聊编程
2019/09/18
9260
shell-编写shell脚本所需的基础语法
常用的shell脚本
天天浏览博客的好处就是可以学习新知识,且可以温习旧知识。 以下内容摘自公众号----一口Linux,在此记录一下。
cultureSun
2023/05/18
4730
Shell-实际业务操作03
文章目录 #!/bin/sh ############################## ## 名称: TarCdrAndTransfer.sh ## 描述: 将/bakcdr/cdrbak/VOI
小小工匠
2021/08/16
1960
shell脚本:通过域名获取证书的过期时间
参考博文:linux学习第七十一篇:shell脚本:通过域名获取证书的过期时间并邮件告警
踏歌行
2020/10/15
1.9K0
Linux运维常用shell脚本之文件和字符串管理实例
编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下:
菲宇
2022/12/02
5620
Linux 【Shell脚本经典案例】
===============Talk is cheap, show me the code,bye-bye================
IT茂茂
2020/09/17
3.3K0
Linux 【Shell脚本经典案例】
Shell脚本编程_shell简单脚本
  shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 shell。
全栈程序员站长
2022/11/09
8.1K0
Shell脚本编程_shell简单脚本
相关推荐
40 个简单又有效的 Linux Shell 脚本示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验