Bourne Shell 脚本/附录 C:快速参考
本节是本文档的快速查找参考。它是一些简要示例和规则的集合,如果你没有阅读过文本,这些示例和规则将是难以理解的。
命令 | 效果 |
---|---|
cat | 按顺序列出文件或多个文件。 |
cd | 更改目录。 |
chmod ugo+rwx | 为用户、组和其他用户设置读、写和执行权限。 |
chmod a-rwx | 从所有用户删除读、写和执行权限。 |
chmod 755 | 设置用户写权限和通用读执行权限 |
chmod 644 | 设置用户写权限和通用读权限。 |
cp | 复制文件。 |
expr 2 + 2 | 添加 2 + 2。 |
fgrep | 搜索字符串匹配。 |
grep | 搜索字符串模式匹配。 |
grep -v | 搜索不匹配。 |
grep -n | 列出匹配项的行号。 |
grep -i | 忽略大小写。 |
grep -l | 仅列出匹配项的文件名。 |
head -n5 source.txt | 列出前 5 行。 |
less | 一次查看一屏文本文件;可以双向滚动。 |
ll | 提供带文件详细信息的文件列表。 |
ls | 提供简单的文件列表。 |
mkdir | 创建一个目录。 |
more | 一次显示一屏文件。 |
mv | 移动或重命名文件。 |
paste f1 f2 | 按列粘贴文件。 |
pg | "more" 的变体。 |
pwd | 打印工作目录。 |
rm | 删除文件。 |
rm -r | 删除整个目录子树。 |
rmdir | 删除空目录。 |
sed 's/txt/TXT/g' | 扫描和替换文本。 |
sed 's/txt/d' | 扫描和删除文本。 |
sed '/txt/q' | 扫描并退出。 |
sort | 对输入进行排序。 |
sort +1 | 跳过排序中的第一个字段。 |
sort -n | 对数字进行排序。 |
sort -r | 反序排序。 |
sort -u | 消除输出中的冗余行。 |
tail -5 source.txt | 列出最后 5 行。 |
tail +5 source.txt | 列出第 5 行之后的全部行。 |
tr '[A-Z]' '[a-z]' | 转换为小写。 |
tr '[a-z]' '[A-Z]' | 转换为大写。 |
tr -d '_' | 删除下划线。 |
uniq | 查找唯一行。 |
wc | 字数统计(字符、单词、行)。 |
wc -w | 仅字数统计。 |
wc -l | 行数统计。 |
命令 | 效果 |
---|---|
shvar="Test 1" | 初始化 Shell 变量。 |
echo $shvar | 显示 Shell 变量。 |
export shvar | 允许子 Shell 使用 Shell 变量。 |
mv $f ${f}2 或 mv ${f}{,2} | 在 Shell 变量中的文件名末尾追加 "2"。 |
$1, $2, $3, ... | 命令行参数。 |
$0 | Shell 程序名称。 |
$# | 参数数量。 |
$* | 完整参数列表(全部在一个字符串中)。 |
$@ | 完整参数列表(每个参数的字符串)。 |
$? | 最后执行的命令的退出状态。 |
shift 2 | 将参数变量向后移动 2 位。 |
read v | 将输入读入变量 "v" 中。 |
. mycmds | 执行文件中的命令。 |
如果语句执行 if
和 then
之间的命令。如果该命令返回非 0,则执行 then
和 else
之间的命令 - 否则执行 else
和 fi
之间的命令。
if test "${1}" = "red" ; then
echo "Illegal code."
elif test "${1}" = "blue" ; then
echo "Illegal code."
else
echo "Access granted."
fi
if [ "$1" = "red" ]
then
echo "Illegal code."
elif [ "$1" = "blue" ]
then
echo "Illegal code."
else
echo "Access granted."
fi
大多数测试命令可以使用多种语法编写。熟练掌握并始终如一地使用一种形式可能是最佳编程实践,并且可能是更高效的时间利用方式。
字符串测试由 test
命令执行。有关更多详细信息,请参见 help test
。为了使脚本看起来更像其他编程语言,定义了同义词 [ ... ]
,它与 test
的功能完全相同。
命令 | 效果 |
---|---|
test "$shvar" = "red" [ "$shvar" = "red" ] |
字符串比较,如果匹配则为真。 |
test "$shvar" != "red" [ "$shvar" != "red" ] |
字符串比较,如果不匹配则为真。 |
test -z "${shvar}" test "$shvar" = "" |
如果变量为空则为真。 |
test -n "${shvar}" test "$shvar" != "" |
如果变量不为空则为真。 |
可以使用 test
执行简单的算术运算,对于更复杂的算术运算,存在 let
命令。有关更多详细信息,请参见 help let
。请注意,对于 let
命令,变量不需要以 '$' 为前缀,并且语句需要是一个参数,在参数内部有空格时使用 '...'
。与 test
一样,定义了一个同义词 - (( ... ))
- 使 Shell 脚本看起来更像普通程序。
命令 | 效果 |
---|---|
test "$nval" -eq 0 let 'nval == 0' |
整数测试;如果等于 0 则为真。 |
test "$nval" -ge 0 let 'nval >= 0' |
整数测试;如果大于或等于 0 则为真。 |
test "$nval" -gt 0 let 'nval > 0' |
整数测试;如果大于 0 则为真。 |
test "$nval" -le 0 let 'nval <= 0' |
整数测试;如果小于或等于 0 则为真。 |
test "$nval" -lt 0 let 'nval < 0' |
整数测试;如果小于 0 则为真。 |
test "$nval" -ne 0 let 'nval != 0' |
整数测试;如果与 0 不相等则为真。 |
let 'y + y > 100' (( y + y >= 100)) |
整数测试;如果 则为真 |
命令 | 效果 |
---|---|
test -d tmp [ -d tmp ] |
如果 "tmp" 是目录,则为真。 |
test -f tmp [ -f tmp ] |
如果 "tmp" 是普通文件,则为真。 |
test -r tmp [ -r tmp ] |
如果 "tmp" 可读,则为真。 |
test -s tmp [ -s tmp ] |
如果 "tmp" 的长度不为零,则为真。 |
test -w tmp [ -w tmp ] |
如果 "tmp" 可写,则为真。 |
test -x tmp [ -x tmp ] |
如果 "tmp" 可执行,则为真。 |
布尔运算由一组运算符执行。需要注意的是,运算符执行程序并比较结果代码。由于布尔运算符通常与test
命令结合使用,因此创建了一种统一的形式[[ ... ]]
。
命令 | 效果 |
---|---|
test -d /tmp && test -r /tmp [[ -d /tmp && -r /tmp ]] |
如果“/tmp”是目录并且可读,则为真。 |
test -r /tmp || test -w /tmp [[ -r /tmp || -w /tmp ]] |
如果“tmp”可读或可写,则为真。 |
test ! -x /tmp [[ ! -x /tmp ]] |
如果文件不可执行,则为真 |
case "$1"
in
"red") echo "Illegal code."
exit;;
"blue") echo "Illegal code."
exit;;
"x"|"y") echo "Illegal code."
exit;;
*) echo "Access granted.";;
esac
for nvar in 1 2 3 4 5
do
echo $nvar
done
for file # Cycle through command-line arguments.
do
echo $file
done
while [ "$n" != "Joe" ] # Or: until [ "$n" == "Joe" ]
do
echo "What's your name?"
read n
echo $n
done
有“break”和“continue”命令,允许您在需要时退出或跳过循环的末尾。
我们可以使用 test 代替 []。[] 要求在括号前后有空格,并且参数之间也应有空格。
此内容最初来自http://www.vectorsite.net/tsshell.html,最初为公共领域。