linux试题答案及详解
2011-07-02 10:22
585 查看
1、查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
find . -type f -perm 644-exec ls -l {} \;
. 当前目录
-type 查找某一类型的文件
f 普通文件
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l – 符号链接文件。
-perm 按照文件权限来查找文件
-exec 选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号
r=4,w=2,x=1 ,十进制表示
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5
2、查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
find / -type f -size 0-exec ls -l {} \;
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
3、查找/zsh目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
find /zsh -type f -mtime+7 -ok rm {} \;
-mtime -n +n 按照更改时间或访问时间查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
rm 删除查找到的文件,删除前给出提示
4、查找系统中所有属于root组的文件 并列出它们的完整路径.
find / -group root -execls -l {} \;
-group 按照文件所属的组来查找文件。
5、myfile.html内容如下:
<b>This</b> is what<b>I</b> meant.
删除HTML标记,也就是要得到:
This is what I meant.
sed's/<[^>]*>//g' myfile.html
s/pattern1/pattern2/将指定行中, 将第一个匹配到的pattern1,替换为pattern2.
awk'{gsub(/<[^>]*>/,"",$0);print}' myfile.html
gsub(r,s,t) 在整个t中用s替代r
6、使用tr命令将trkh.txt文件的空行删除
tr -s "[\012]"< trkh.txt 或 tr -s ["\n"] < trkh.txt
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
tr -s "[\012]" 用单独的换行替换每一序列的一个或多个换行
7、在txt目录下搜索所有包含有‘the’单词的.c文件,列出文件名
grep -l ‘the’ *.c
ls | grep'the.*\.c$' 匹配含the且以.c结尾的文件(正则表达式\.用来匹配点字符)
-l只给出包含给定模式的文件列表,而不给出文件中的匹配行
8、使用grep将express文件里以数字开头的行删除掉
grep -v ‘^[0-9]’ express
-v 显示不包含匹配文本的所有行
写出实现下列功能地命令:
9.查出所有用户名至少有4个字符地己登录用户
users | grep'.....*'
who | awk '{if ($1~/.....*/) print $1}'
10.查出系统中所有用户标识号大于99的用户
cat /etc/passwd | awk'BEGIN{FS=":"}{if ($3>99) print $1}'
FS字段分隔符(默认是任何空格)。
11.系统中用户标识号大于99的用户数
cat /etc/passwd| awk 'BEGIN{FS=":";users=0}{if ($3>99) users++; } END{ printusers}'
users=0 定义users变量
12 .按文件大小的降序列出目录中的所有文件
ls -l | sort-grk5
-l 以常格式显示文件的详细信息。输出的信息分成多列
-g 按照常规数值排序
-r 按逆序排序。默认按升序排序的。
-k n1[,n2] 指定从文本的第n1字段开始至第n2字段(不包括n2字段)中间的内容作为排序的关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。
(13-34)分别使用sed和awk实现下面的功能(使用express文件)
13.在每一行后面增加一空行
sed Gexample.txt
获得内存缓冲区的内容,并追加到当前模板块文本的后面。
awk '{printf("%s\n\n", $0)}'example.txt
%s相当于c语言的占位符
$0输出整行
14.设置文本中每一行后面有且只有一空行。
sed '/^$/d;G' express.txt
d 从模板块(Pattern space)位置删除行。
awk'!/^$/{printf("%s\n\n",$0)}'
15.在每行后面增加2行空行
sed 'G;G' express.txt
awk '{printf("%s\n\n\n", $0)}' express.txt
awk '1;{print "\n"}' express.txt
16.删除所有偶数行
sed 'n;d'express.txt
n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
awk 'NR%2!=0{print $0}' express.txt
NR 当前记录数。
17.在匹配The的行前插入空行
sed '/^the/{x;p;x;}' express.txt
x 将模式空间和缓冲区兑换。
awk'{if(/The/)printf("\n%s\n",$0);else print $0}'
18.输出行号,行号和正文间加冒号
sed =express.txt | sed 'N;s/\n/:/'
= 打印当前行号,但是行号跟文本行不在同一行。
N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
awk'{i++;printf("%d\t%s\n",i,$0)}' example.txt
19.对文件中的所有非空行编号
sed'/./=' express.txt | sed '/./N; s/\n/ /'
awk'{if(!/^$/){i++;printf("%d %s\n",i,$0)}else print}' express.txt
20.计算行号(模拟 “wc -l”)
sed-n '$=' example.txt
-n 安静模式,不直接打印,将打印权交给后面的命令
awk'{i++}END{print i}' example.txt
21.模拟dos2unix
\*sed's/.$//'
awk'{gsub(/\x0D$/,"");print $0}'
awk'{gsub(/\r/, “”); print $0}'
*/
sed's/^M//g' express > express1
awk'gsub(/^M/,""){print $0}' express > express2
22.将所有good改为bad并打印且只打印该行
sed -n 's/good/bad/g'p express.txt
g表示行内全面替换。
p表示打印行。
awk '{if(gsub(/good/,"bad")) print $0}' express.txt
23.将包含is的行的good改为bad并打印且只打印该行
sed -n'/is/{/good/{s/good/bad/g;p}}' express.txt
sed -n'/is/s/good/bad/g'p express.txt
awk'{if(/is/){if(gsub(/good/,"bad")) print $0}}' express.txt
24.将不包含is的行的good改为bad并打印且只打印该行
sed -n '!/is/s/good/bad/p' express.txt //错误
sed -n'/is/!{/good/{s/good/bad/g;p}}' express
awk '{if ($0!~/is/ &&$0~/good/) {gsub(/good/,"bad"); print $0}}' express
awk'{if(!/is/&&/good/){gsub(/good/,"bad"); print $0}}' express
awk'{if(!/is/){if(gsub(/good/,"bad")) print $0}}' express
25.显示文件中的前10行 (模拟“head” )
cat -nexpress | sed 10q express.txt
cat –n 从1开始对所有输出行编号。
q退出Sed。
awk'{if(NR<=10) print}' express.txt
26.在每5行后增加一空白行
sed'n;n;n;n;G;' express.txt
n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
G获得内存缓冲区的内容,并追加到当前模板块文本的后面。
awk'{print; if(NR%5==0){printf("\n")}}' express.txt
27.倒置所有行,第一行成为最后一行,依次类推(模拟“tac”)
sed'1!G;h;$!d' express.txt
sed -n '1!G;h;$p' express.txt
h拷贝模板块的内容到内存中的缓冲区。
! 表示后面的命令对所有没有被选定的行发生作用。
28.显示文件中的最后10行 (模拟“tail”)
sed -e :a -e '$q;N;11,$D;ba' express.txt
-e允许多台编辑。
a在当前行后面加入一行文本,循环指令。
ba无条件跳转指令
awk'{A[NR]=$0}END{for(i=NR-9;i<=NR;i++)print A[i]}' express.txt
29.显示文件中的最后2行(模拟“tail -2”命令)
sed'$!N;$!D' express.txt
$ 最后一行
! 表示后面的命令对所有没有被选定的行发生作用。
N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
D删除模板块的第一行。
awk'{A[NR]=$0}END{for(i=NR-1;i<=NR;i++)print A[i]}' express.txt
30.显示文件中的最后一行(模拟“tail -1”)
sed -n'$p' express.txt
sed -n'$!d' express.txt
awk'{A=$0}END{print A}' express.txt
31.显示第9行
sed -n'9p' express.txt
awk'{if(NR==9) print}' express.txt
32.显示包含50个或以上字符的行
sed -n'/^.\{50\}/p' express.txt
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
awk'{if(length>=50) print}' express.txt
33.显示部分文本——从包含apple的行开始到最后一行结束
sed -n'/apple/,$p' express.txt
awk'/apple/{F=1}{if(F)print}' express.txt
34.显示通篇文档,除了从包含apple的行到包含google的行
sed'/apple/,/google/d' express.txt
35.解释一下什么是shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
36.编写一个名为nf的程序,显示当前目录中的文件数。键入程序并测试。
ls-l | grep "^-" | wc –l
ls-l
长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)
grep "^-"
这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l
统计输出信息的行数,因为已经过滤得只剩一
37.编写一个名为whos的程序,显示排好序的已登录用户清单。只显示用户名,不要有其他信息。键入程序并测试。
who | sort -r-k1 | awk '{print $1}'
-r 按逆序排序。默认按升序排序的。
-k n1[,n2] 指定从文本的第n1字段开始至第n2字段(不包括n2字段)中间的内容作为排序的关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。
$1只打印没行记录的第一列,也就是登录的用户名
38.在终端上显示
<<< echo $x >>> displaysthe value of x,which is $x
显示的时候,第2个$x的值应该被替换,比如如果x=3,显示:
<<< echo $x >>> displaysthe value of x,which is 3
x=3
echo “<<< echo\$x >>> displays the value of x,which is $x”
双引号中,除了下面的三种字保留本意外, 其他的被shell忽略:
1:$
2:反引号``
3:反斜杠\
39.依次执行下面三条命令,分析结果。
filename=/home/zsh/express
filename=$(echo $filename| tr “$(echo $filename | cut –cl)” “^”)
echo filename
40.shell编程里的$(…)结构是什么作用,举例说明。
Shell 执行()中命令,并把该命令的标准输出插在命令所在的位置。
w=$(who)
echo $w
41.编写一脚本,打印出所有的参数。
echo $*
42.编写一个脚本,统计参数的总数。
echo $#
43 编写一个名为rename的程序,给第1个参数所给定的文件更名,在原名后添加第2个参数包含的一串字符。即
rename memol .sv
应该将文件memol更名为memol.sv
mv $1 $1$2
$n 取得第n个参数
44编写一个名为unrename的程序,从第1个参数指定的文件名的后部去掉第2个参数包含的字符串,即
unrename memol.sv .sv
应该把文件memol.sv更名为memol。要保证从尾部去掉字 符串,如
unrename test1test test
应该将tes1test更名为test1(提示:用sed和命令替换)
mv $1 $(echo $1 | sed"s/$2$//")
$n取出第n个参数
第二个$以第二个参数结尾
s sed的替换命令
45 编写名为valid 的程序,如果参数是合法的shell变量名,则显示“yes”,否则显示“no”
if echo"$1" | grep -q '^[_a-zA-Z][_a-zA-Z0-9]*$'
then
echo "yes"
else
echo "no"
fi
-q 不显示任何的一般输出
46 编写一个shell脚本,使用循环语句将当前目录下的.c文件更名为.cpp.
#!/bin/sh
#ctag
for loop in $(ls)
do
if echo "$loop" | grep -q “\.c$”
then
echo "rename $loop to $(echo $loop |sed "s/\.c$/\.cpp/")"
mv $loop $(echo $loop | sed"s/\.c$/\.cpp/")
fi
done
source命令和exec命令有啥区别?举例说明。
虽然exec和source都是在父进程中直接执行,但exec这个与source有很大的区别,source是执行shell脚本,而且执行后会返回以 前的shell。而exec的执行不会返回以前的shell了,而是直接把以前登陆shell作为一个程序看待,在其上经行复制。
不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。
在shell中执行ls,ls结束后不返回原来的shell中了
exec ls
将express中的内容作为exec的标准输入
exec < express
将express中的内容作为标准写出
exec > express
在当前目录下(包含子目录),删除所有txt文件
find ./ -name "*.txt" -exec rm {}
48.将当前目录下的所用文件打包成一个文件。
#!/bin/sh
#cmprs
tar czvf my.tar.gz $(ls)
-c — 创建一个新归档。
-z — 使用 gzip 来压缩 tar 文件。
-v — 显示文件的归档进度。
-f — 当与 -c 选项一起使用时,创建的 tar 文件使用该选项指定的文件名;当与 -x 选项 一起使用时,则解除该选项指定的归档。
find . -type f -perm 644-exec ls -l {} \;
. 当前目录
-type 查找某一类型的文件
f 普通文件
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l – 符号链接文件。
-perm 按照文件权限来查找文件
-exec 选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号
r=4,w=2,x=1 ,十进制表示
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5
2、查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
find / -type f -size 0-exec ls -l {} \;
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
3、查找/zsh目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
find /zsh -type f -mtime+7 -ok rm {} \;
-mtime -n +n 按照更改时间或访问时间查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
rm 删除查找到的文件,删除前给出提示
4、查找系统中所有属于root组的文件 并列出它们的完整路径.
find / -group root -execls -l {} \;
-group 按照文件所属的组来查找文件。
5、myfile.html内容如下:
<b>This</b> is what<b>I</b> meant.
删除HTML标记,也就是要得到:
This is what I meant.
sed's/<[^>]*>//g' myfile.html
s/pattern1/pattern2/将指定行中, 将第一个匹配到的pattern1,替换为pattern2.
awk'{gsub(/<[^>]*>/,"",$0);print}' myfile.html
gsub(r,s,t) 在整个t中用s替代r
6、使用tr命令将trkh.txt文件的空行删除
tr -s "[\012]"< trkh.txt 或 tr -s ["\n"] < trkh.txt
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
tr -s "[\012]" 用单独的换行替换每一序列的一个或多个换行
7、在txt目录下搜索所有包含有‘the’单词的.c文件,列出文件名
grep -l ‘the’ *.c
ls | grep'the.*\.c$' 匹配含the且以.c结尾的文件(正则表达式\.用来匹配点字符)
-l只给出包含给定模式的文件列表,而不给出文件中的匹配行
8、使用grep将express文件里以数字开头的行删除掉
grep -v ‘^[0-9]’ express
-v 显示不包含匹配文本的所有行
写出实现下列功能地命令:
9.查出所有用户名至少有4个字符地己登录用户
users | grep'.....*'
who | awk '{if ($1~/.....*/) print $1}'
10.查出系统中所有用户标识号大于99的用户
cat /etc/passwd | awk'BEGIN{FS=":"}{if ($3>99) print $1}'
FS字段分隔符(默认是任何空格)。
11.系统中用户标识号大于99的用户数
cat /etc/passwd| awk 'BEGIN{FS=":";users=0}{if ($3>99) users++; } END{ printusers}'
users=0 定义users变量
12 .按文件大小的降序列出目录中的所有文件
ls -l | sort-grk5
-l 以常格式显示文件的详细信息。输出的信息分成多列
-g 按照常规数值排序
-r 按逆序排序。默认按升序排序的。
-k n1[,n2] 指定从文本的第n1字段开始至第n2字段(不包括n2字段)中间的内容作为排序的关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。
(13-34)分别使用sed和awk实现下面的功能(使用express文件)
13.在每一行后面增加一空行
sed Gexample.txt
获得内存缓冲区的内容,并追加到当前模板块文本的后面。
awk '{printf("%s\n\n", $0)}'example.txt
%s相当于c语言的占位符
$0输出整行
14.设置文本中每一行后面有且只有一空行。
sed '/^$/d;G' express.txt
d 从模板块(Pattern space)位置删除行。
awk'!/^$/{printf("%s\n\n",$0)}'
15.在每行后面增加2行空行
sed 'G;G' express.txt
awk '{printf("%s\n\n\n", $0)}' express.txt
awk '1;{print "\n"}' express.txt
16.删除所有偶数行
sed 'n;d'express.txt
n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
awk 'NR%2!=0{print $0}' express.txt
NR 当前记录数。
17.在匹配The的行前插入空行
sed '/^the/{x;p;x;}' express.txt
x 将模式空间和缓冲区兑换。
awk'{if(/The/)printf("\n%s\n",$0);else print $0}'
18.输出行号,行号和正文间加冒号
sed =express.txt | sed 'N;s/\n/:/'
= 打印当前行号,但是行号跟文本行不在同一行。
N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
awk'{i++;printf("%d\t%s\n",i,$0)}' example.txt
19.对文件中的所有非空行编号
sed'/./=' express.txt | sed '/./N; s/\n/ /'
awk'{if(!/^$/){i++;printf("%d %s\n",i,$0)}else print}' express.txt
20.计算行号(模拟 “wc -l”)
sed-n '$=' example.txt
-n 安静模式,不直接打印,将打印权交给后面的命令
awk'{i++}END{print i}' example.txt
21.模拟dos2unix
\*sed's/.$//'
awk'{gsub(/\x0D$/,"");print $0}'
awk'{gsub(/\r/, “”); print $0}'
*/
sed's/^M//g' express > express1
awk'gsub(/^M/,""){print $0}' express > express2
22.将所有good改为bad并打印且只打印该行
sed -n 's/good/bad/g'p express.txt
g表示行内全面替换。
p表示打印行。
awk '{if(gsub(/good/,"bad")) print $0}' express.txt
23.将包含is的行的good改为bad并打印且只打印该行
sed -n'/is/{/good/{s/good/bad/g;p}}' express.txt
sed -n'/is/s/good/bad/g'p express.txt
awk'{if(/is/){if(gsub(/good/,"bad")) print $0}}' express.txt
24.将不包含is的行的good改为bad并打印且只打印该行
sed -n '!/is/s/good/bad/p' express.txt //错误
sed -n'/is/!{/good/{s/good/bad/g;p}}' express
awk '{if ($0!~/is/ &&$0~/good/) {gsub(/good/,"bad"); print $0}}' express
awk'{if(!/is/&&/good/){gsub(/good/,"bad"); print $0}}' express
awk'{if(!/is/){if(gsub(/good/,"bad")) print $0}}' express
25.显示文件中的前10行 (模拟“head” )
cat -nexpress | sed 10q express.txt
cat –n 从1开始对所有输出行编号。
q退出Sed。
awk'{if(NR<=10) print}' express.txt
26.在每5行后增加一空白行
sed'n;n;n;n;G;' express.txt
n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
G获得内存缓冲区的内容,并追加到当前模板块文本的后面。
awk'{print; if(NR%5==0){printf("\n")}}' express.txt
27.倒置所有行,第一行成为最后一行,依次类推(模拟“tac”)
sed'1!G;h;$!d' express.txt
sed -n '1!G;h;$p' express.txt
h拷贝模板块的内容到内存中的缓冲区。
! 表示后面的命令对所有没有被选定的行发生作用。
awk '{A[i++]=$0}END{for(j=i-1;j<=0;j--)print A[j]}' express.txt
28.显示文件中的最后10行 (模拟“tail”)
sed -e :a -e '$q;N;11,$D;ba' express.txt
-e允许多台编辑。
a在当前行后面加入一行文本,循环指令。
ba无条件跳转指令
awk'{A[NR]=$0}END{for(i=NR-9;i<=NR;i++)print A[i]}' express.txt
29.显示文件中的最后2行(模拟“tail -2”命令)
sed'$!N;$!D' express.txt
$ 最后一行
! 表示后面的命令对所有没有被选定的行发生作用。
N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
D删除模板块的第一行。
awk'{A[NR]=$0}END{for(i=NR-1;i<=NR;i++)print A[i]}' express.txt
30.显示文件中的最后一行(模拟“tail -1”)
sed -n'$p' express.txt
sed -n'$!d' express.txt
awk'{A=$0}END{print A}' express.txt
31.显示第9行
sed -n'9p' express.txt
awk'{if(NR==9) print}' express.txt
32.显示包含50个或以上字符的行
sed -n'/^.\{50\}/p' express.txt
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
awk'{if(length>=50) print}' express.txt
33.显示部分文本——从包含apple的行开始到最后一行结束
sed -n'/apple/,$p' express.txt
awk'/apple/{F=1}{if(F)print}' express.txt
34.显示通篇文档,除了从包含apple的行到包含google的行
sed'/apple/,/google/d' express.txt
awk '/apple/{F=1}{if(!F)print}/google/{F=0}' express.txt
35.解释一下什么是shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
36.编写一个名为nf的程序,显示当前目录中的文件数。键入程序并测试。
ls-l | grep "^-" | wc –l
ls-l
长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)
grep "^-"
这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l
统计输出信息的行数,因为已经过滤得只剩一
37.编写一个名为whos的程序,显示排好序的已登录用户清单。只显示用户名,不要有其他信息。键入程序并测试。
who | sort -r-k1 | awk '{print $1}'
-r 按逆序排序。默认按升序排序的。
-k n1[,n2] 指定从文本的第n1字段开始至第n2字段(不包括n2字段)中间的内容作为排序的关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。
$1只打印没行记录的第一列,也就是登录的用户名
38.在终端上显示
<<< echo $x >>> displaysthe value of x,which is $x
显示的时候,第2个$x的值应该被替换,比如如果x=3,显示:
<<< echo $x >>> displaysthe value of x,which is 3
x=3
echo “<<< echo\$x >>> displays the value of x,which is $x”
双引号中,除了下面的三种字保留本意外, 其他的被shell忽略:
1:$
2:反引号``
3:反斜杠\
39.依次执行下面三条命令,分析结果。
filename=/home/zsh/express
filename=$(echo $filename| tr “$(echo $filename | cut –cl)” “^”)
echo filename
40.shell编程里的$(…)结构是什么作用,举例说明。
Shell 执行()中命令,并把该命令的标准输出插在命令所在的位置。
w=$(who)
echo $w
41.编写一脚本,打印出所有的参数。
echo $*
42.编写一个脚本,统计参数的总数。
echo $#
43 编写一个名为rename的程序,给第1个参数所给定的文件更名,在原名后添加第2个参数包含的一串字符。即
rename memol .sv
应该将文件memol更名为memol.sv
mv $1 $1$2
$n 取得第n个参数
44编写一个名为unrename的程序,从第1个参数指定的文件名的后部去掉第2个参数包含的字符串,即
unrename memol.sv .sv
应该把文件memol.sv更名为memol。要保证从尾部去掉字 符串,如
unrename test1test test
应该将tes1test更名为test1(提示:用sed和命令替换)
mv $1 $(echo $1 | sed"s/$2$//")
$n取出第n个参数
第二个$以第二个参数结尾
s sed的替换命令
45 编写名为valid 的程序,如果参数是合法的shell变量名,则显示“yes”,否则显示“no”
if echo"$1" | grep -q '^[_a-zA-Z][_a-zA-Z0-9]*$'
then
echo "yes"
else
echo "no"
fi
-q 不显示任何的一般输出
46 编写一个shell脚本,使用循环语句将当前目录下的.c文件更名为.cpp.
#!/bin/sh
#ctag
for loop in $(ls)
do
if echo "$loop" | grep -q “\.c$”
then
echo "rename $loop to $(echo $loop |sed "s/\.c$/\.cpp/")"
mv $loop $(echo $loop | sed"s/\.c$/\.cpp/")
fi
done
source命令和exec命令有啥区别?举例说明。
虽然exec和source都是在父进程中直接执行,但exec这个与source有很大的区别,source是执行shell脚本,而且执行后会返回以 前的shell。而exec的执行不会返回以前的shell了,而是直接把以前登陆shell作为一个程序看待,在其上经行复制。
不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。
在shell中执行ls,ls结束后不返回原来的shell中了
exec ls
将express中的内容作为exec的标准输入
exec < express
将express中的内容作为标准写出
exec > express
在当前目录下(包含子目录),删除所有txt文件
find ./ -name "*.txt" -exec rm {}
48.将当前目录下的所用文件打包成一个文件。
#!/bin/sh
#cmprs
tar czvf my.tar.gz $(ls)
-c — 创建一个新归档。
-z — 使用 gzip 来压缩 tar 文件。
-v — 显示文件的归档进度。
-f — 当与 -c 选项一起使用时,创建的 tar 文件使用该选项指定的文件名;当与 -x 选项 一起使用时,则解除该选项指定的归档。
相关文章推荐
- 老男孩linux培训某节课前考试试题及答案分享 【转】
- Linux试题及参考答案
- PMP考试真题模拟PMP考试模拟试题及答案详解
- EXAM-1试题及答案详解
- Linux试题及答案
- 一份linux运营试题,答案不全
- Linux试题及答案
- Linux考证模拟试题二(含答案)
- linux试题及答案
- 老男孩linux培训某节课前考试试题及答案分享
- Linux试题及答案(一)
- 2016年Linux兴趣小组免试题Level_5及Level_End详解
- 面试===Linux试题及答案
- 大学考试的LINUX试题参考答案
- Linux考证模拟试题一(含答案)
- Linux模拟试题及答案(全)
- Linux试题与答案
- Red Hat Linux - RHCE部分模拟试题 //答案不保正确//
- Linux试题与答案