3天玩转shell--10.shell编程技巧汇总

简介: 本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。

一、这节课掌握如下几个知识点

【1】分享shell编程中的一些小技巧、以及一些巧妙的使用方法。
【2】通过该次分享能在使用过程避免一些坑。

二、代码讲解

本节主要讲解在shell中涉及的加减乘除、时间等相关运算。
#!/bin/bash
#10.sh v1
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
export LANG=zh_CN.UTF-8
export PATH

#1.随机数的获取,随机小数、随机数字、随机字符串
 #随机小数,使用场景:需要进行随机延迟处理的情况  
rds=$(echo "0.`tr -dc 0-9 </dev/urandom |head -c 3`")
echo $rds

#随机数字范围,使用场景:用于取随机小时或分,然后任务在指定的小时或分钟去执行
function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(($RANDOM+$RANDOM))
    echo $(($num%$max+$min))  
}
sss=$(rand 0 60)
dd=$(date +%M)
if [[ 10#$dd -eq $sss ]];then
   echo "run"
fi

#取20位数字 使用场景:随机生成密码
head  /dev/urandom  |  tr -dc 0-9  | head -c 20

#取20位包含数字、大小写的字符串,使用场景:随机生成密码
head  /dev/urandom  |  tr -dc A-Za-z0-9  | head -c 20

#2.IP的获取和正则匹配
Ip=$(ifconfig | awk '/inet /{sub(/addr:/,"",$2);print $2}'|grep -v "127.0.0.1")
echo $Ip|grep -P '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$'

#3.编码转换处理,使用场景:将utf-8编码的文件转成gbk编码,反之亦可,适用在Linux终端是gbk编码需要处理utf8编码下的中文字符
     iconv -f UTF-8 -t GBK file1 >file2
     iconv -f GBK -t UTF-8 file1 >file2

#4.将windows下编写的脚本放到linux运行时需要执行此命令转成linux格式的文件。
    dos2unix test.sh

#5.curl使用,使用场景:在使用curl的情况下加上超时可以避免curl进程被长期挂住的情况,加上-s参数可以不打印文件下载的过程
     curl -s --connect-timeout 5 --max-time 10
-s:静默模式
--connect-timeout:连接超时
--max-time:最大下载时间

#6.wget使用
/usr/bin/wget -N -c -t 3 -T 60 -P
-N:表示文件有更新就进行下载
-c:用于断点续传
-t :   重试3次
-T:超时60秒
-P:下载之后存放的目录

#7.EOF处理大段字符输出,或者用于注释脚本
cat >> /etc/xx.conf <<"EOF"
/etc/
/data/PRG/*/etc
/data/PRG/*/conf
/data/PRG/*/config
/var/
/var/spool/cron/
/usr/local/etc/
/usr/etc/
EOF

#可用于注释一段shell代码
:<<EOF
    echo "yes"
    echo "yes"
EOF

#8.脚本执行的唯一性,使用场景:防止脚本同时执行
if [ -s /tmp/.run.tag ];then
  lastrunt=$(head -1 /tmp/.run.tag)
  ttimes=$(( ${Timestamp:0:10} - $lastrunt ))
  if [[ 10#$ttimes -ge 180 ]] || [[ 10#$ttimes -lt 0 ]];then  #避免进程意外退出导致tag标签遗留
     rm -f /tmp/.run.tag
  fi
  echo "`date +"%Y-%m-%dT%H:%M:%S"` [ERROR] task already run" >>$logfile 2>&1
  exit 0
fi
echo "${Timestamp:0:10}" >/tmp/.run.tag

#9.获取脚本执行的路径,使用场景:可以增加脚本的通用型,将脚本放于任何目录都可以执行。
ROOT=$(cd "$(dirname "$0")"; pwd) #获取脚本所在路径

#10.掌握find,xargs、vim、iptables等重要命令,处理任务起来半功倍。

#11.jq命令,使用场景:在Linux 终端解析json字符串的最佳命令

#12.命令执行超时,高版本Linux系统会有timeout命令,低版本系统只能通过脚本实现。为了避免某个操作出现异常时不被长期挂起,需要在执行的命令前面加上超时。
function TimeOut() {
   waitsec=10
   ( $* ) & pid=$!
   ( sleep $waitsec && kill -HUP $pid ) 2>/dev/null & watchdog=$!
   if wait $pid 2>/dev/null; then
      pkill -HUP -P $watchdog
      wait $watchdog
   fi
}

#13.shell中的进制,在shell中遇到 0开头的数字,默认会以八进制来计算,也就是说到8时就会溢出,正确用法是在变量前用10#。
dd=$(date +%M)
if (( 10#$dd % 2 == 0 ));then
   echo "run"
fi

#14.while 循环中,通过管道符传入数据的循环中定义的变量的作用域只限于循环内。
cat 4.example.txt|while read ip name
    do
       total=$[total+1]
       echo "$ip $name"
    done
    echo "all:$total"
#解决方法:done < 4.example.txt

15.在执行ping检测时,为了方便记录ping的检测结果,在ping的结果上加时间戳 
ping 192.168.239.43 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' >> ping.log &
相关文章
|
Shell Linux
Linux Shell 进阶:探索高级命令和脚本编程技巧
Linux Shell不仅仅是一个命令解释器,它还提供了许多强大的高级命令和脚本编程技巧,能够帮助用户更高效地管理系统和处理数据。在这篇文章中,我们将深入探讨Linux Shell的高级功能。
173 0
|
5月前
|
Shell Linux C语言
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
Linux中执行Shell的函数(popen,system,exec)介绍:分享一些常用的执行Shell的函数及其相关编程技巧和经验
143 0
|
弹性计算 Shell 测试技术
3天玩转shell--8.awk编程技巧二
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
125 0
|
弹性计算 Shell Linux
3天玩转shell--7.awk编程技巧一
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
109 0
|
16天前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
43 12
|
12天前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
21 2
|
20天前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
23天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
38 2
|
6天前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
10 0
|
1月前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
48 17