本文主要是shell——自己平时常用的脚本汇总相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
点击查看相关文件下载
1.路径获取与拆分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # ${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%%.*}"
|
运行结果为:
1 2 3 4 5 6 7 8 9 10 11 12
| hk@vm:~/1sharedfiles/6temp$ ./1.sh ${FILE_PATH} = a/b/c/d/file.tar.gz
${FILE_PATH ${FILE_PATH ${FILE_PATH%/*} = a/b/c/d ${FILE_PATH%%/*} = a
${FILE_PATH ${FILE_PATH ${FILE_PATH%.*} = a/b/c/d/file.tar ${FILE_PATH%%.*} = a/b/c/d/file
|
2.获取shell参数
1 2 3 4 5 6 7 8 9 10
| #!/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}"
|
【注意】
1 2
| 当 $* 和 $@ 不被双引号 " " 包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。 当 $* 和 $@ 不被双引号 " " 包围时,"$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。
|
运行结果如下:
1 2 3 4 5 6 7
| 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.获取当前时间字符串
1 2 3 4 5
| #!/bin/sh
day=`date +%Y_%m_%d_%H_%M_%S` echo "${day}"
|
运行结果如下:
1 2
| hk@vm:~/1sharedfiles/6temp$ ./1.sh 2023_03_25_21_39_32
|