终端输出奇技淫巧
1. \u{1B}[1A\u{1B}[K
这是一种 ANSI 转义序列,通常用于控制终端的光标位置和清除屏幕上的文本。”\u{1B}[1A” 表示将光标向上移动一行,”\u{1B}[K” 表示清除当前光标位置后面的文本。组合在一起,这个序列的意思是将光标移动到当前行的开头并清除该行的文本。
Pod cache
http://blog.fpliu.com/it/os/macOS/software/CocoaPods/pod-cache
shell 杂记
1. shell 语句中的while 循环语句
while test 条件
do
# 循环体代码
done
while test $count -gt 0; do
echo ""
done
while [ $count -gt 0 ]; do
echo ""
done
2. shell 语法中的shift语句
用于移动参数的位置,它将命令行参数往左移动一个位置,即第二个参数移动到第一个位置,以此类推
语法为 shift [n]
, 可选的参数n
指定移动参数的数量。如果未指定n
,则默认为1,即只移动一个参数。
3. shell 中方法的定义与调用
# 定义
function_name() {
# method body
}
# 调用
function_name parameter1 parameter2
4. shell 特殊变量
在shell编程中,$0
和$1
是特殊变量,用于引用脚本名称和脚本的第一个参数。它们是内置的变量,可以在shell脚本中直接使用。
$0
:代表当前脚本的名称,即执行脚本时输入的文件名或路径。例如,如果脚本名为myscript.sh
,则$0
将为myscript.sh
。$1
:代表脚本的第一个参数,即在执行脚本时传递给它的第一个参数。例如,如果执行myscript.sh
时传递了一个参数hello
,则$1
将为hello
5. dirname shell命令
dirname
是一个常用的 Unix/Linux shell 命令,用于获取文件或目录路径的父目录。dirname
命令接受一个文件或目录路径作为参数,并返回该路径的父目录
6. 获取符号链接的真实地址
在 shell 脚本中,您可以使用以下方法获取当前执行符号链接(link)脚本的真实路径
bashCopy code
#!/bin/bash
# 获取当前执行符号链接脚本的真实路径
real_script_path="$( cd "$( dirname "$(readlink -f "${BASH_SOURCE[0]}")" )" &> /dev/null && pwd )"
echo "当前执行符号链接脚本的真实路径: $real_script_path"
这段代码首先使用 ${BASH_SOURCE[0]}
获取脚本的相对路径,然后使用 readlink -f
获取符号链接脚本的真实路径。接下来,使用 dirname
获取脚本所在的目录。最后,使用 cd
命令进入该目录,并使用 pwd
命令获取脚本所在目录的绝对路径。将结果赋值给 real_script_path
变量。
7. 判断数组是否为空
在 shell 脚本中,可以使用 -z
测试运算符来检查数组是否为空。以下是一个示例,演示如何检查数组是否为空:
#!/bin/bash
# 创建一个空数组
empty_array=()
# 创建一个非空数组
non_empty_array=("元素1" "元素2" "元素3")
# 数组增加新元素
non_empty_array=("${non_empty_array[*]}" "元素4" "元素5")
# 检查 empty_array 是否为空
if [ -z "${empty_array[*]}" ]; then
echo "empty_array 是空的"
else
echo "empty_array 不是空的"
fi
# 检查 non_empty_array 是否为空
if [ -z "${non_empty_array[*]}" ]; then
echo "non_empty_array 是空的"
else
echo "non_empty_array 不是空的"
fi
8. 获取cpu架构
在 shell 脚本中,可以使用 uname
命令来判断 CPU 的架构。uname
命令用于输出系统信息,其中包括硬件架构。要获取硬件架构,可以使用 uname -m
命令。
9. 读取管道传进来文本
在 shell 脚本中,可以使用 read
命令从管道中读取传入的文本。以下是一个示例,演示如何在 shell 脚本中读取从管道传入的文本:
bashCopy code
#!/bin/bash
# 从管道中读取传入的文本
while IFS= read -r input_line; do
# 输出传入的文本
echo "您传入的文本是:$input_line"
done
在这个示例中,我们使用 while
循环和 read
命令从管道中读取传入的文本。IFS=
用于保留空白字符,-r
选项用于防止反斜杠转义。对于从管道中读取的每一行文本,我们都会输出相应的内容。
10. 文字颜色、背景颜色
在 shell 中,可以使用 ANSI 转义序列来更改文本颜色和背景颜色。ANSI 转义序列是一种特殊的字符序列,用于控制终端的显示属性,如颜色、粗体、下划线等。
以下是一些常见的 ANSI 转义序列,用于更改文本颜色和背景颜色:
- 文本颜色:
- 黑色:
\033[30m
- 红色:
\033[31m
- 绿色:
\033[32m
- 黄色:
\033[33m
- 蓝色:
\033[34m
- 洋红色:
\033[35m
- 青色:
\033[36m
- 白色:
\033[37m
- 黑色:
- 背景颜色:
- 黑色:
\033[40m
- 红色:
\033[41m
- 绿色:
\033[42m
- 黄色:
\033[43m
- 蓝色:
\033[44m
- 洋红色:
\033[45m
- 青色:
\033[46m
- 白色:
\033[47m
- 黑色:
要在 shell 脚本中使用这些 ANSI 转义序列,请将它们与要显示的文本一起输出。例如,要输出红色文本,可以使用以下命令:
bashCopy code
echo -e "\033[31mThis is red text\033[0m"
在这个示例中,我们使用 -e
选项告诉 echo
命令解释转义序列。\033[31m
将文本颜色更改为红色,\033[0m
将颜色重置为默认值。
要同时更改文本颜色和背景颜色,可以将相应的转义序列组合在一起。例如,要输出白色文本和蓝色背景,可以使用以下命令:
bashCopy code
echo -e "\033[37;44mWhite text on a blue background\033[0m"
在这个示例中,我们将文本颜色的转义序列(\033[37m
)和背景颜色的转义序列(\033[44m
)组合在一起。请注意,这些转义序列之间用分号(;
)分隔
11. shell 中给命令传入一个数组作为多参数
如果一个命令比如test [paths] test 命令可以传入至少一个path作为参数, 我们需要如下给test传入:
array=("path1", "path2", "path3")
test $(printf "%s " "${array[@]}")
12. 如何判断脚本是否在Bash shell中运行
-z "${BASH_VERSION:-}"
是一个 Bash 条件表达式,用于检查当前 shell 是否为 Bash。这个表达式的含义如下:
-z
:这是一个测试运算符,用于检查字符串的长度是否为零。如果字符串长度为零,则返回真(true);否则返回假(false)。"${BASH_VERSION:-}"
:这是一个参数扩展表达式,用于获取BASH_VERSION
变量的值。如果BASH_VERSION
变量未设置或为空,则使用空字符串替换。BASH_VERSION
变量在 Bash shell 中自动设置,包含当前 Bash 版本的信息。
因此,-z "${BASH_VERSION:-}"
表达式的含义是:如果 BASH_VERSION
变量为空(即字符串长度为零),则返回真(true);否则返回假(false)。换句话说,如果当前 shell 不是 Bash(即 BASH_VERSION
未设置),则此表达式为真(true)。
13. xargs 命令
xargs 用于从标准输入(stdin)读取数据,并将这些数据作为参数传递给别的命令。
-I 后跟一个字符串,用于指定一个占位符,xargs 从标准输入读取数据的时候,会将占位符替换成真正的数据。占位符可多次使用。
-P 后跟一个数组,用于指定并行执行的进程数量。
# CMD 是一个占位符
xargs -I CMD
# 最大并行执行进程为4个
xargs -I CMD -P 4
# eg.
echo "test1 test2 test3" | xargs -I CMD -P 4 echo "Processing: CMD"
# 输出:
# Processing: test1
# Processing: test2
# Processing: test3