全宇宙最全的Linux运维bash脚本常见用法总结( 二 )


示例功能:
count() {# Usage: count /path/to/dir/*#count /path/to/dir/*/printf '%sn' "$#"}用法示例:
# Count all files in dir.$ count ~/Downloads/*232# Count all dirs in dir.$ count ~/Downloads/*/45# Count all jpg files in dir.$ count ~/Pictures/*.jpg64创建一个空文件替代touch 。
# Shortest.>file# Longer alternatives::>fileecho -n >fileprintf '' >file提取两个标记之间的线条示例功能:
extract() {# Usage: extract file "opening marker" "closing marker"while IFS=$'n' read -r line; do[[ $extract && $line != "$3" ]] &&printf '%sn' "$line"[[ $line == "$2" ]] && extract=1[[ $line == "$3" ]] && extract=done < "$1"}用法示例:
# Extract code blocks from MarkDown file.$ extract ~/projects/pure-bash/README.md '```sh' '```'# Output here...文件路径获取文件路径的目录名称替代dirname命令 。
示例功能:
dirname() {# Usage: dirname "path"printf '%sn' "${1%/*}/"}用法示例:
$ dirname ~/Pictures/Wallpapers/1.jpg/home/black/Pictures/Wallpapers/$ dirname ~/Pictures/Downloads//home/black/Pictures/获取文件路径的基本名称替代basename命令 。
示例功能:
basename() {# Usage: basename "path": "${1%/}"printf '%sn' "${_##*/}"}用法示例:
$ basename ~/Pictures/Wallpapers/1.jpg1.jpg$ basename ~/Pictures/Downloads/Downloads变量使用变量分配和访问变量$ hello_world="value"# Create the variable name.$ var="world"$ ref="hello_$var"# Print the value of the variable name stored in 'hello_$var'.$ printf '%sn' "${!ref}"value或者,在bash4.3+上:
$ hello_world="value"$ var="world"# Declare a nameref.$ declare -n ref=hello_$var$ printf '%sn' "$ref"value根据另一个变量命名变量$ var="world"$ declare "hello_$var=value"$ printf '%sn' "$hello_world"valueESCAPE序列与流行的看法相反,使用原始逃逸序列没有问题 。使用tput与手动打印相同的ANSI序列的摘要 。更糟糕的是,tput实际上并不便携 。有许多tput变体,每个变体都有不同的命令和语法(


推荐阅读