shell 中的小技巧
去掉最后一个字符
-
sed 's/.$//'
-
awk '{sub(/.$/,"")}1'
-
awk '{printf $0"\b \n"}'
[root@ ~]# echo "387691,387710,387720,387817,387922,388067,"
387691,387710,387720,387817,387922,388067,
[root@ ~]# echo "387691,387710,387720,387817,387922,388067," | sed 's/.$//'
387691,387710,387720,387817,387922,388067
[root@ ~]# echo "387691,387710,387720,387817,387922,388067," | awk '{sub(/.$/,"")}1'
387691,387710,387720,387817,387922,388067
[root@ ~]# echo "387691,387710,387720,387817,387922,388067," | awk '{printf $0"\b \n"}'
shell脚本传参小技巧
一般常见的脚本参数传递:./script.sh --argv1=a1 --argv2=a2 或者 ./script.sh -a1 a1 -a2 a2 ,或者两种混用
ParseArguments() {
while [ $# != 0 ] ;
do
case "$1" in
-argv1|-a1)
argv1=$2
shift 2
;;
--argv1=*)
argv1=${1#--argv1=}
shift
;;
-argv2|-a2)
argv2=$2
shift 2
;;
--argv2=*)
argv2=${1#--argv2=}
shift
;;
-argv3|-a3)
argv3=$2
shift 2
;;
--argv3=*)
argv3=${1#--argv3=}
shift
;;
*)
echo "$1 error"
echo $"$0: Usage: ..."
exit 1
;;
esac
done
}
ParseArguments "$@"
对True | False 进行判断的函数
is_true() {
case "$1" in
[tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE])
return 0
;;
esac
return 1
}
is_false() {
case "$1" in
[fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE])
return 0
;;
esac
return 1
}
当is_true函数的第一个参数(后面的参数会忽略掉)为忽略大小写的t、y、yes或true时,返回状态码0,否则返回1。
当is_false函数的第一个参数(后面的参数会忽略掉)为忽略大小写的f、n、no或false时,返回状态码0,否则返回1。
对比两个目录的文件差异
diff <(tree -Ci --noreport d1) <(tree -Ci --noreport d2)
diff -r d1 d2
vimdiff <(find d1 -printf "%P\n" | sort) <(find d2 -printf "%P\n" | sort)
#或者远程比较:
vimdiff <(ssh -p 22 -o StrictHostKeyChecking=no 127.0.0.1 "find /tmp/test/t1 -printf '%P\n' | sort" 2>/dev/null) <(find /tmp/test/t2 -printf "%P\n" | sort)
vimdiff方法可以得到如下截图效果:
一次赋值多个变量
[root@ ]# read a b c <<< $(echo 11 22 33)
[root@ ]# echo $a
11
[root@ ]# echo $b
22
[root@ ]# echo $c
33
crontab定时清理日期子目录
##例如这样的日期子目录
# ls -l
total 864
drwxrwxr-x 2 root root 77824 Mar 26 22:14 20210319
drwxrwxr-x 2 root root 77824 Mar 27 00:21 20210320
drwxrwxr-x 2 root root 77824 Mar 26 23:36 20210321
drwxrwxr-x 2 root root 77824 Mar 27 09:58 20210322
drwxrwxr-x 2 root root 73728 Mar 28 03:24 20210323
drwxrwxr-x 2 root root 81920 Mar 29 03:25 20210324
drwxrwxr-x 2 root root 81920 Mar 30 03:31 20210325
drwxrwxr-x 2 root root 77824 Mar 30 12:00 20210326
drwxrwxr-x 2 root root 57344 Mar 27 23:59 20210327
drwxrwxr-x 2 root root 57344 Mar 28 23:59 20210328
drwxrwxr-x 2 root root 57344 Mar 29 23:59 20210329
drwxrwxr-x 2 root root 36864 Mar 30 16:32 20210330
##crontab中可以这样写更精确按日期删除:
00 02 * * * od=$(date -d '7 day ago' '+\%Y\%m\%d'); cd /data/logs/ddd/ && find . -maxdepth 1 -type d -name '202?????' -printf '\%f\n' | xargs -i sh -c "[ '{}' -lt $od ] && rm -rf '{}'" >/dev/null 2>&1
获取脚本路径
dirname $(realpath "${BASH_SOURCE[0]}")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能