Linux 操作系统课程练习题(三)shell 编程
一、填空
-
运行 shell 脚本的一种方式是先将脚本赋予可执行权限,假设要对 ex01.sh 的所有用户都添加可执行权限,写出使用的命令:chmod a+x ex01.sh 。要在当前目录下执行该脚本,写出使用的命令(假设 PATH 中并未包含当前目录):./ex01.sh 。
-
linux 中如下命令:gcc m1.c 2>errfile 中的数字 2 表示标准错误输出 ,需要注意的是数字 2 和>之间(可以/不可以)有空格。
-
某个 shell 脚本文件中有一行 echo‘there are total $# parameters’,其中的 $#是指参数个数。
【扩展】
⑴$#
——除脚本名外,命令行上参数的个数。
⑵$?
——上一条前台命令执行后的返回值(也称“退出码”等)。
⑶$$
——当前进程的进程号。
⑷$!
——上一个后台命令对应的进程号。
⑸$*
——表示在命令行上实际给出的所有实参。
⑹$@
——它与$*
基本功能相同。 -
要想在~/.bashrc 文件中添加环境变量 JAVA_HOME,对应的值为/usr/java1.8.0/,写出对应的行:export JAVA HOME=/usr/java1.8.0/ 。
环境变量的创建:创建一个shell变量,然后用export将其转化为环境变量。
-
要想在 shell 脚本中测试第一个参数指定的文件是否可执行,应使用的测试条件为:test -x $1。
【有关文件方面的测试】
参数 说明 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真 【有关字符串方面的测试】
参数 说明 = 等于为真 != 不等于为真 -z 字符串 字符串长度为零则为真 -n 字符串 字符串长度不为零则为真 【有关数值方面的测试】
参数 说明 -eq 等于为真 -ne 不等与为真 -gt 大于为真 -ge 大于等于为真 -lt 小于为真 -le 小于等于为真 【逻辑运算符】
⑴ ! 表示逻辑非(NOT)。
例如,[ ! -r “$1” ]
或! test -r "$1"
⑵ -a 表示逻辑与(AND)。
例如:[ -f "$myfile" –a -r "$myfile" ]
⑶ -o 表示逻辑或(OR)。
例如:[ "$a" -ge 0 -o "$b" -le 100 ]
-
程序填空
(1)利用 for 循环将当前目录下的.c 文件移动到指定的目录下,并按文件大小排序显示移动后指定目录的内容(指定目录为第 1 个参数)。#!/bin/bash
for file in ./*.c
do
mv $file $1
done
ls -l -S $1【解析】
for的值可以使文件正则表达式,匹配.c为./*.c
-S sort by file size(根据文件大小排序)2)编写一个 shell 脚本,它把第二个参数及其以后的各个参数指定的文件复制到第一个参数指定的目录中。
#!/bin/bash
dest = $1
while [ $1 ]
do
if [ $1 != dest ]
then cp $1 $dest
fi
shift
done
二、选择
-
命令 echo `pwd`可能的输出结果是什么(C)
A) pwd
B)`pwd`
C) /home/tom
D) 报错【解析】
用倒引号括起来的字符串被shell解释为命令行。
执行pwd,显示当前的工作目录。 -
假设执行如下命令./exam1 a b c d,在 shell 脚本中第一个 shift 命令执行后,echo $1 的输出是什么(C)。
A)exam1
B)a
C)b
D)c【解析】
用shift命令移动位置参数 。
执行shift之前$1为第一个参数a
执行shift之后,向左移动一个参数,$1为b -
echo $SHELL 的输出结果不可能是(C)。
A) /bin/bash
B)/bin/csh
C)shell
D)/bin/sh【解析】:
SHELL为环境变量
(1)HOME:用户主目录的全路径名。如/home/myname
(2)LOGNAME:即用户注册名
(3)PWD:当前工作目录的路径。
(4)PATH:shell查找命令的路径(目录)列表,各个目录用冒号(:)隔开。
(5)PS1:shell的主提示符。$ PS1="$LOGNAME> "
(6)SHELL:当前使用的shell。通常,它的值是/bin/bash。
(7)TERM:终端类型。
(8)MAIL:系统信箱的路径。 -
使用 read 命令读入三个变量:read a b c,假设随后键入以下内容:1 2 3 4 5,则变量 c 被赋予的值是(D)。
A) 3
B) c
C) 空
D) 3 4 5 -
以下哪些不是 linux shell 程序中 if 语句的关键字(D)。
A) if
B) fi
C) then
D) elseif -
若想在 shell 脚本中比较整型变量 a 是否小于整形变量 b,应使用的测试条件是 (C )。
A) test a < b
B) test $a < $b
C) test $a -lt $b
D) test a -lt b -
执行 ls exam?.sh 时下列哪个文件不可能被匹配(C)。
A)exam1.sh
B)exama.sh
C)exam12.sh
D)examA.sh【解析】:
?为通配符,匹配任意字符。C为两个字符,不可能匹配 -
执行 ls exam*([0-9]).sh 时下列哪个文件不可能被匹配(B)。
A)exam.sh
B)exama2.sh
C)exam2.sh
D)exam23.sh【解析】:
[字符组]
为匹配该字符所限定的任意一个字符,如f[abcd]可匹配fa、fb、fc、fd。
也可写为f[a-d]。
*
为匹配任意字符的0次或多次出现,如f*可以匹配f,fa,f1,fa2,ffas等;
B不可能匹配,匹配的应该为0-9,a错误; -
对命令 cat exam0.sh $>file 的解释不正确的是(C)。
A)其中的>是输出重定向符号
B)如果存在 exam0.sh 文件,则文件内容会被保存到 file 文件中
C)如果不存在 exam0.sh 文件,则错误信息会输出到屏幕上
D)该命令等同于 cat exam0.sh > file 2>& 1【解析】:
输入输出重定向符
gcc m1.c 2> errfile
把编译过程中产生的错误信息重新定向到文件errfile中,2为标志错误输出的文件描述。
command $> file
把命令command的标准输出和标准错误输出都放入file文件中。
等价于command > file 2>& 1
(2>&不能有空格)
C错误,输出到屏幕错误; -
要测试变量 fname(文件或者目录)是否存在,应该使用(A)。
A) test -e $fname
B) test -f $fname
C) test -d $fname
D) test -x $fname -
使用方括号[ ]作为测试条件时,方括号[的后面和]的前面是否需要包含空格(A)。
A) 需要
B) 不需要
C) 都可以 -
若想在 shell 脚本中比较字符串变量 a 是否等于”yes”,应使用的测试条件是 ( B)。
A) test a = ‘yes’
B) test $a = ‘yes’
C) test $a -eq ‘yes’
D) test a -eq ‘yes’【解析】:
字符串比较为”=“,数值为”-eq“,所以选B -
shell 脚本中退出循环的命令是 (C)。
A) exit
B) continue
C) break
D) quit
三、简答
设计 shell 程序输入三个数字,并将其按照从小到大的顺序输出。