日志
定义日志的颜色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #!/bin/bash
_COLORS=${BS_COLORS:-$(tput colors 2>/dev/null || echo 0)} __detect_color_support() { if [ $? -eq 0 ] && [ "$_COLORS" -gt 2 ]; then RC='\033[1;31m' GC='\033[1;32m' BC='\033[1;34m' YC='\033[1;33m' EC='\033[0m' else RC="" GC="" BC="" YC="" EC="" fi } __detect_color_support echoerror() { printf "${RC} * ERROR${EC}: %s\\n" "$@" 1>&2; } echoinfo() { printf "${GC} * INFO${EC}: %s\\n" "$@"; } echowarn() { printf "${YC} * WARN${EC}: %s\\n" "$@"; }
echoinfo "Hello World" echowarn "Hello World" echoerror "Hello World"
|
常见的条件判断
判断目录是否存在
1 2 3 4 5 6 7 8 9
| #!/bin/bash
LOGS_PATH="/tmp/logs/blog"
if [ ! -d "$LOGS_PATH" ]; then echo "目录不存在" else echo "目录已存在" fi
|
判断操作系统类型
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/bash
_OS_LINUX="Linux" _OS_INFO=`uname -a`
if [[ $_OS_INFO =~ $_OS_LINUX ]] then echo "Linux 操作系统" else echo "非 Linux 操作系统" fi
|
判断是否为 Root 用户
1 2 3 4 5
| #!/bin/bash
if [ $UID -ne 0 ]; then echo "非 Root 用户!" fi
|
执行脚本
执行指定的 Shell 脚本文件
使用 Linux 命令,执行指定的 Shell 脚本文件
执行指定的 Shell 脚本内容
使用 Linux 命令,执行指定的 Shell 脚本内容
1
| sh -c "echo 现在的时间:`date '+%Y-%m-%d %H:%M:%S'`"
|
获取 Linux 命令的执行结果
1 2 3 4
| #!/bin/bash
date_str=$(date) echo $date_str
|
执行字符串里的 Shell 脚本内容
1 2 3 4
| #!/bin/bash
UPDATE_SYSTEM_DYNAMIC_LIBS=0 echo "### 是否更新系统的动态链接库: `[[ $UPDATE_SYSTEM_DYNAMIC_LIBS -eq 1 ]] && echo '是' || echo '否'`"
|
程序运行状态
获取应用的进程数
1 2 3 4 5 6 7 8
| #!/bin/bash
program_name="dockerd"
count=`ps -aux | grep -w "$program_name" | grep -v grep | wc -l` echo $count
|
获取应用的进程 ID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #!/bin/bash
program_name="dockerd"
process_ids=`ps -aux | grep -w "$program_name" | grep -v grep | awk '{print $2}'`
if [ ! -n "$process_ids" ]; then echo "$program_name 没有运行" else process_ids_str=`echo $process_ids` echo "$program_name 已经有实例正在运行,PID 是 ${process_ids_str/ /, }" fi
|
日期处理
判断是否为周末
1 2 3 4 5 6 7
| #!/bin/bash
if [[ $(date +%u) -gt 5 ]]; then echo "今天是周末" else echo "今天不是周末" fi
|
判断今天是星期几
1 2 3 4 5
| #!/bin/bash
DOW=$(date +%u) echo $DOW
|
文件处理
读取 ini 配置文件
提示
- ini 配置文件的格式介绍,可以参考这里
- ini 配置文件的后缀名不一定必须是
.ini
,也可以是 .cfg
、.conf
或者是 .txt
。
1 2 3 4 5
| [Server1] ip = 127.0.0.1
[Server2] ip = 192.168.1.1
|
1 2 3 4 5 6 7 8 9 10 11
| function __readINI() { INIFILE=$1; SECTION=$2; ITEM=$3 _readContent=`awk -F '=' '/\['$SECTION'\]/{a=1}a==1&&$1~/'$ITEM'/{print $2;exit}' $INIFILE` echo ${_readContent} }
_IP1=( $( __readINI config.ini Server1 ip ) ) _IP2=( $( __readINI config.ini Server2 ip ) )
echo ${_IP1} echo ${_IP2}
|
FFmpeg 批量压缩 MP4 文件
请确保将 /path/to/your/directory
替换为 MP4 文件所在的目录路径。此脚本将使用 FFmpeg 将每个 MP4 文件压缩为 H.264 视频编解码器和 AAC 音频编解码器,并将压缩后的文件保存在原始目录中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #!/bin/bash
directory="/path/to/your/directory"
for file in "$directory"/*.mp4; do filename=$(basename "$file") extension="${filename##*.}"
output_filename="${filename%.*}_compressed.${extension}"
ffmpeg -i "$file" -c:v libx264 -crf 23 -c:a aac -b:a 128k "$directory/$output_filename"
echo "已压缩文件: $filename -> $output_filename" done
|