Skip to content

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/file

2. 获取 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 2

3. 获取当前时间字符串

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