Linux教程第四版课后习题4答案
第四章
4.1常⽤的shell有哪⼉种?Linux系统中默认的shell 是什么?
答:linux⼏种常见的Shell:sh、bash、csh、tcsh、ash
Linux下默认的Shell是Bourne Again Shell(bash)
4.2简述shell的主要功能。bash有什么特点?
答:Shell是系统的⽤户界⾯,提供了⽤户与内核进⾏交互操作的⼀种接⼝。它接收⽤户输⼊的命令并把它送⼊内核去执⾏。
引⽤、多命令执⾏、命令⾏展开:~ {}、命令的执⾏状态结果、多命令执、命令补全:$PATH、路径补全:TAB、命令hash缓存表、命令别名:alias, unalias 命令历史:history、⽂件名通配符:glob、变量、bash快捷键。
4.3执⾏shell脚本的⽅式是哪些?
答:1、输⼊定向到shell脚本。该⽅式⽤输⼊重定向⽅式让shell从给定⽂件中读⼊命令⾏,并进⾏相应处理。其⼀般形式是: $bash<;脚本名例如:
$ bash
2、以脚本名作为bash参数。其⼀般形式是:
$bash脚本名 [参数]
3、将shell脚本的权限设置为可执⾏,然后在提⽰符下直接进⾏。
4.4将主提⽰符改为⽤户的主⽬录名,并予以输出。
答:export PS1= $HOME
echo $HOME
4.5说明三种引号的作⽤有什么区别。
答:Linux Shell中有三种引号,分别为双引号(" ")、单引号(' ')以及反引号(` `)。
双引号(" "):在双引号中,除了$, '', `和\以外所有的字符都解释成字符本⾝。
单引号(' '):在单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本⾝⽽成为普通字符。
反引号(` `):在反引号中的字符串将解释成shell命令来执⾏。
4.6利⽤变量赋值⽅式,将字符串DOS file c:>\$student\*显⽰出来。
答:$ i=DOS
linux教程第五版pdf下载$ j=file
$ k=”c:>\$student\*”
4.7显⽰环境变量的设置情况,说明各⾃的意义。
答:
只对当前的shell 起作⽤的环境变量
1、控制台中设置,不赞成这种⽅式,因为他只对当前的shell 起作⽤,换⼀个shell设置就⽆效了:
直接控制台中输⼊: $PATH="$PATH":/NEW_PATH (关闭shell Path会还原为原来的path)
对所有的⽤户的都起作⽤的环境变量
vi /etc/profile
在/etc/profile的最下⾯添加: export PATH="$PATH:/NEW_PATH"
针对当前特定的⽤户起作⽤的环境变量
3、修改bashrc⽂件,这种⽅法更为安全,它可以把使⽤这些环境变量的权限控制到⽤户级别,这⾥是针对某⼀特定的⽤户,如果你需要给某个⽤户权限使⽤这些环境变量,你只需要修改其个⼈⽤户主⽬录下的 .bashrc⽂件就可以了。
vi ~/.bashrc
在下⾯添加:Export PATH="$PATH:/NEW_PATH"。
4.8 分析下列shell脚本的功能:
count=$#
cmd=echo
while [$count -gt 0]
do
cmd= "$cmd \$$count ”
count=‘expr $count-1’
done
eval $cmd
答:count=$# # 获取脚本参数个数
cmd=echo # 初始化 cmd 变量,赋值为“echo”
while [ $count -gt 0] # 如果 count ⼤于0,执⾏下⾯的循环
do
cmd="$cmd \$$count" # 给cmd重新赋值,变为“echo ${count的值}”
count='expr $count-1' # count减1
done # 之后回到上⾯的 while 判断
eval $cmd # 执⾏cmd命令。
类似于执⾏堆栈操作。
4.9编写⼀个shell脚本,它把第⼆个位置参数及其以后的各个参数指定的⽂件复制到第⼀个位置参数指定的⽬录中。
答:#!/bin/bash //调⽤bash程序对其解释执⾏,相当与于头⽂件dir=$1 //初始化
shift //参数向左移
while [$1] /循环
do
file=$1 // 初始化,赋值现在位置的参数1
cp $1 $dir //将现位置参数1中的值复制到⽬录中
shift //参数左移
done
ls $dir 显⽰指定⽬录中的列表
4.10编写⼀个shell脚本,显⽰当天⽇期,查给定的某⽤户是否在系统中⼯作。如果在系统中,就发⼀个问候给他。答:#!/bin/bash
date /显⽰⽇期
if
who |grep "^$1" /寻⽤户
then
write $1 << ! /对⽤户发消息
echo "hello !"
fi
运⾏:bash+⽂件名称
4.11打印给定⽬录的某些⽂件,由第⼀个参数指出⽂件所在的⽬录,其余参数是要打印的⽂件名。
答:#!/bin/bash
dir=$1 // $1表⽰第⼀参数
cd $ dir
shift
for f in $@; // $@表⽰全部参数
do
cat $f
done
运⾏:bash+程序代码名称+⽬录名称+⽂件名称
4.12利⽤for循环将当前⽬录下的(*.c)⽂件移到指定的⽬录下,并按⽂件⼤⼩排序,显⽰移动后指定⽬录的内容。答:#!/bin/bash
for file in `ls -l /root/a | grep ".*.c"` (Tab键上⾯的`)
mv /root/a/$file /root/b
}
ls -lS /root/b
运⾏:bash+⽂件名称
4.13利⽤数组形式存放10个城市的名字,然后利⽤for 循环把他们打印出来。
答:#!/bin/bash
for China in Beijing Shanghai Guangzhou Shenzhen Chongqing Tianjin Wuhan Taiwan Xianggang Aomen do
echo $China
done
运⾏:bash+代码名称
4.14编写⼀个shell脚本,求斐波那契数列的前10项及总和。
答:#!/bin/bash
a=1
b=1
echo –n –e "$a\t$b"
let "n=a+b"
count=4
while [ $count –gt 0 ]
do
let "a=a+b"
let "b=b+a"
echo –n –e "\t$a\t$b"
let "count=count-1"
done
echo
echo "The sum is $n"
运⾏:bash+创建的⽂件
4.15下述表达式的作⽤是什么?
${ name [*]} ${ name[@]} ${ name#*/ } ${ name%%.* } ${ #name[*]} ${name:-Hello}
答:${name[*]}:数组所有元素
${name[@]}:数组每⼀个元素
${name#*/}:删掉第⼀个/及其左边的字符串
${name%%.*}:删掉第⼀个.及其右边的字符串
${#name[*]}:数组元素的个数
${name:-Hello}:⽤ Hello 代替 name进⾏替换,name的值不变
4.16显⽰前⾯所执⾏的40个命令的清单,重新执⾏倒数第5条命令。编写其中⼀条命令,然后执⾏。
答;运⾏:history 40
#!-5
4.17定义⼀个别名命令,它等价的功能是:显⽰当前⽇期和⼯作⽬录,并列出有多少⽤户在系统上⼯作。
答:#!/bin/bash
echo $(date)
echo $(pwd)
who | wc -w
运⾏:bash+代码名称
4.18设计⼀个程序cuts,它由标准输⼊读取数据,获取由第⼀个参数n和第⼆个参数m所限定范围的数据,n和m 都是整数,即从输⼊的字符串中抽取第n个字符⾄第m个字符之间的所有字符(包括这两个字符)。
答;#!/bin/bash

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。