第四章
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 $ j=file $ k=”c:>\\$student\\*” 4.7显示环境变量的设置情况,说明各自的意义。 答: 只对当前的shell 起作用的环境变量 1、控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了: 直接控制台中输入 : $PATH=\ (关闭shell Path会还原为原来的path) 对所有的用户的都起作用的环境变量 2、修改 /etc/profile 文件,如果你的计算机仅仅作为开发使用时推存使用这种方法,因为所有用户的shell都有权使用这个环境变量,可能会给系统带来安全性问题。这里是针对所有的用户的,所有的shell vi /etc/profile 在/etc/profile的最下面添加: export PATH=\针对当前特定的用户起作用的环境变量 3、修改bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的 .bashrc文件就可以了。 vi ~/.bashrc 在下面添加:Export PATH=\。 4.8 分析下列shell脚本的功能: count=$# cmd=echo while [$count -gt 0] do cmd= \count ” count=‘expr $count-1’ done eval $cmd 答:count=$# # 获取脚本参数个数 cmd=echo # 初始化 cmd 变量,赋值为 “echo” while [ $count -gt 0] # 如果 count 大于0,执行下面的循环 do cmd=\给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 显示指定目录中的列表 运行:bash+代码名称+要移动的目录+要移动的文件 4.10编写一个shell脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中,就发一个问候给他。 答:#!/bin/bash date /显示日期 if who |grep \/寻找用户 then write $1 << ! /对用户发消息 ! echo \ 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 \键上面的`) { 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 \let \