LV500-常用脚本
本文主要是 shell——自己平时常用的脚本汇总相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正 😃。
1. 路径获取与拆分
shell
# ${parameter#*word} 即从左向右截取第一个 word 后的字符串
# ${parameter##*word} 即从左向右截取最后一个 word 后的字符串
# ${parameter%word*} 即从右向左截取第一个 word 前的字符串
# ${parameter%%word*} 即从右向左截取最后一个 word 前的字符串
#!/bin/sh
FILE_PATH=a/b/c/d/file.tar.gz
echo "\${FILE_PATH} = ${FILE_PATH}"
echo ""
echo "\${FILE_PATH#*/} = ${FILE_PATH#*/}"
echo "\${FILE_PATH##*/} = ${FILE_PATH##*/}"
echo "\${FILE_PATH%/*} = ${FILE_PATH%/*}"
echo "\${FILE_PATH%%/*} = ${FILE_PATH%%/*}"
echo ""
echo "\${FILE_PATH#*.} = ${FILE_PATH#*.}"
echo "\${FILE_PATH##*.} = ${FILE_PATH##*.}"
echo "\${FILE_PATH%.*} = ${FILE_PATH%.*}"
echo "\${FILE_PATH%%.*} = ${FILE_PATH%%.*}"运行结果为:
shell
hk@vm:~/1sharedfiles/6temp$ ./1.sh
${FILE_PATH} = a/b/c/d/file.tar.gz
${FILE_PATH#*/} = b/c/d/file.tar.gz
${FILE_PATH##*/} = file.tar.gz
${FILE_PATH%/*} = a/b/c/d
${FILE_PATH%%/*} = a
${FILE_PATH#*.} = tar.gz
${FILE_PATH##*.} = gz
${FILE_PATH%.*} = a/b/c/d/file.tar
${FILE_PATH%%.*} = a/b/c/d/file2. 获取 shell 参数
shell
#!/bin/sh
ARGC=$# # 参数的数量(不包含./file.sh)
ARGV="$@" # 作为数组使用
ARGS="$*" # 作为字符串使用
echo "\${ARGC} = ${ARGC}"
echo "\${ARGV} = ${ARGV}"
echo "\${ARGV[@]} = ${ARGV[@]}"
echo "\${ARGV[*]} = ${ARGV[*]}"
echo "\${ARGS} = ${ARGS}"
echo "shell pram = ${0} ${ARGS}"【注意】
shell
当 $* 和 $@ 不被双引号 " " 包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。
当 $* 和 $@ 不被双引号 " " 包围时,"$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。运行结果如下:
shell
hk@vm:~/1sharedfiles/6temp$ ./1.sh 1 2
${ARGC} = 2
${ARGV} = 1 2
${ARGV[@]} = 1 2
${ARGV[*]} = 1 2
${ARGS} = 1 2
shell pram = ./1.sh 1 23. 获取当前时间字符串
shell
#!/bin/sh
day=`date +%Y_%m_%d_%H_%M_%S`
echo "${day}"运行结果如下:
shell
hk@vm:~/1sharedfiles/6temp$ ./1.sh
2023_03_25_21_39_32