跳转到内容

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 行数统计。

基本 Shell 功能

[编辑 | 编辑源代码]
命令 效果
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 语句

[编辑 | 编辑源代码]

如果语句执行 ifthen 之间的命令。如果该命令返回非 0,则执行 thenelse 之间的命令 - 否则执行 elsefi 之间的命令。

   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" = ""
[ "$shvar" = "" ]

如果变量为空则为真。
test -n "${shvar}"

test "$shvar" != ""
[ -n "$shvar" ]
[ "$shvar" != "" ]

如果变量不为空则为真。

算术测试

[编辑 | 编辑源代码]

可以使用 test 执行简单的算术运算,对于更复杂的算术运算,存在 let 命令。有关更多详细信息,请参见 help let。请注意,对于 let 命令,变量不需要以 '$' 为前缀,并且语句需要是一个参数,在参数内部有空格时使用 '...'。与 test 一样,定义了一个同义词 - (( ... )) - 使 Shell 脚本看起来更像普通程序。

命令 效果
test "$nval" -eq 0

let 'nval == 0'
[ "$nval" -eq 0 ]
(( nval == 0 ))

整数测试;如果等于 0 则为真。
test "$nval" -ge 0

let 'nval >= 0'
[ "$nval" -ge 0 ]
(( nval >= 0 ))

整数测试;如果大于或等于 0 则为真。
test "$nval" -gt 0

let 'nval > 0'
[ "$nval" -gt 0 ]
(( nval > 0 ))

整数测试;如果大于 0 则为真。
test "$nval" -le 0

let 'nval <= 0'
[ "$nval" -le 0 ]
(( nval <= 0 ))

整数测试;如果小于或等于 0 则为真。
test "$nval" -lt 0

let 'nval < 0'
[ "$nval" -lt 0 ]
(( nval < 0 ))

整数测试;如果小于 0 则为真。
test "$nval" -ne 0

let 'nval != 0'
[ "$nval" -ne 0 ]
(( 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 语句

[编辑 | 编辑源代码]
   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,最初为公共领域。


下一页: 附录 D:食谱 | 上一页: 附录 B:环境引用
主页: Bourne Shell 脚本
华夏公益教科书