习题07_Shell编程
linuxshell脚本编程练习作业及答案(全)
linuxshell脚本编程练习作业及答案(全)本人乃一介草民,刚学shell编程不久,一日见有人发题求助,所以自己也当作练习来练练手,写的不好请勿吐槽,可与本人交流,一起学习!!(1)创建用户批量创建1000个用户用户名为:班级+学号+昵称;每个班为一个组群能够自动删除所创建的用户每成功创建或删除一个用户,在屏幕上显示用户名(题目中这用户,也太tm多了点,没有达到题目的全部要求,还是水平有限啊!!)#!/bin/bash#this is programe to build users batchecho "how many users you want to add"read -p "input the numbers of users: " numcount=1while [ $count -le $num ]douseradd -G class1 std$countecho "user std$count del successfully"count=$(($count + 1))doneread -p "what do you want to do: " dolet count=count-1case $do ind)for(( count; count >= 1;count-- ))douserdel -r std$countecho "user std$count del successfully"done;;*) exit;;esac############################################# #####(2)创建目录和文件,目录名为:dir1, dir2, …, dir10每个目录下分别新建10个文本文件,文件名为:目录名+file1~10并设置每个文件的权限:文件所有者:读+写+执行同组用户:读+执行其他用户:读+执行等待键盘输入一个数字,范围为1~10重命名该级目录(假设输入数字为“5”,则为“dir5”目录)下所有文件的扩展名为bak,并将该目录下所有文件名保存到一个文本文件删除包含该数字的所有目录和文件#!/bin/bash#test 2for((i=1;i<=10;i++))domkdir /root/tmp/dir$icd /root/tmp/dir$ichmod 755 -R . #这有个(.)代表当前文件夹a=1while [ $a -le 10 ]dotouch dir${i}file$alet a=a+1donedoneread -p "which directory you want chage:" numcd /root/tmp/dir$numfor s in `ls /root/tmp/dir$num`domv $s $s.bakdonels /root/tmp/dir$num >../outrm -rf /root/tmp/*${num}*############################################# #####(3)备份文件l 每天18:00归档/etc目录下的所有文件,归档文件名为如下形式:etc-YYYY-MM-DD;保存在/home/user/backup目录下,其中user 为当前登录用户名需要编写一个脚本,放到/etc/cron.d/script :vi script#!/bin/bashDATE=`date +%F`tar -cvf /etc-$DATE /etcmkdir /home/$USER/backupmv /etc-$DATE /home/$USER/backup#结束,保存chmod +x scriptcrontab -e00 18 * * * /etc/cron.d/script############################################# #####同上差不多l 每天8:00压缩/etc目录下的所有内容,压缩文件名为如下形式:etc-YYYY-MM-DD;存放在/home/user/tar目录下,其中user为当前登录用户名l 每周日17:00归档/home下每个目录,归档文件名为如下形式:dir-YYYY-MM-DD;保存在/tmp/YYYYMMDD目录下############################################# #####(4)查找统计l 查看/etc/passwd中所有包含字符串“aa”的用户,并将结果保存在文本文件中grep "aa.*" /etc/passwd|cut -d: -f1 >filel 查看/bin中包含字符串“ls”的文件名,并将结果保存在文本文件中ls /bin|grep "ls.*" >filel 把/bin和/sbin下的文件名保存到文件commandview中ls /bin /sbin >commandviewl 统计/bin和/sbin下的文件数量ls /bin |wc -lls /sbin|wc -l############################################# #####真心不会只知道ps top(5)进程管理l 显示系统正在运行的所有进程l 显示当前终端正在运行的所有进程应该是: ps -Hl 显示root正在运行的所有进程l 以优先级-16后台启动一个进程“find / -name ls* > tmp &”l 显示该进程信息ps -ef |grep findl 修改该进程的优先级renicel 杀掉该进程kill id############################################# #####(6)系统信息显示当前登录的用户名whoami显示系统中所有用户名cut -d ":" -f1 /etc/passwd显示本机名hostname显示本机操作系统的名称、版本cat /etc/issue显示文件系统信息df -h显示当前系统状态信息############################################# #####(7)加减乘除运算,其中l 两个操作数和一个运算符由位置参数给出l 在屏幕上分别显示操作数、运算符和运算结果#!/bin/bash#test 7read -p "input first num: " var1read -p "input +-*/ : " varread -p "input second num: " var2v=`echo "scale=2; $var1 $var $var2 "|bc`echo "$var1 $var $var2 = $v"############################################# #####(8)按照运行结果编写Shell程序:101210123210123432101234543210123456543210123456765432101234567876543210123456789876543210123456789#!/bin/bash#test 8i=0for(( i; i <= 9; i++ ))doj=$ifor(( i; i >= 0; i-- ))doecho -n "$i"donea=1while [ $a -le $j ]doecho -n "$a"let a=a+1doneecho " "i=$jdone############################################# #####(9)逆序输出一个字符串#!/bin/bash#test 9read -p "input chars : " charrev $char############################################# #####(10)冒泡法对10个数按升序排序#!/bin/bash#test 10 冒泡法输出i=0for m in "$@"doa[i]=$mdone# $#随意多个位置参数都可以进行排序,具体到n个参数,则改为nfor (( i = 0; i <= $# ; i++ ))dofor(( j=1+i; j <= $# ; j++ ))doif [[ ${a[i]} -gt ${a[j]} ]]thent=${a[i]}a[$i]=${a[j]}a[$j]=$tfidonedoneecho "${a[@]}" #不换行输出#如果要换行输出用下面语句:for k in "${a[@]}"doecho $kdone~############################################# #####(11)编写1个menu的Shell程序,执行后的界面为:NumberNameFor Linux Menu2viedit a file3datedate4calcalendar5wholist the users6lslist the files in this directory7catdisplay a file on the screenPlease input a number or a name for the action you wish:(有点差异,绞尽脑汁也不知道怎么改的跟上面一样:)echo "NumberNameFor Linux Menu"select var in "exitleave" "viedit a file" "datedate" "calcalendar" "wholist the user" "lslist the files in this directory" "catdisplay a file on the screen"dobreakdoneecho "please input a number or a name for the action you wish:"echo "your choose is $var"############################################# #####(12)求n的阶乘,n=100方法1:#!/bin/basha=1for(( i=1; i <= 100; i++ ))doa=$[ $i * $a ]doneecho "100!=$a"#我的电脑100!输不出来,可能是出题目的有点脑残,考算法直接用10就可以嘛!!方法2(递归)(可以求任意数的阶乘,但是。
Linux shell编程实验作业(含答案)
Linux shell实验作业参考1.编写一个Shell脚本,实现输入一个数字,输出该数字的阶乘。
思路:使用for循环,从1到输入的数字进行累乘,最终输出结果。
#!/bin/bashecho "请输入一个数字:"read numfact=1for ((i=1;i<=$num;i++))dofact=$(($fact*$i))doneecho "阶乘为:$fact"2. 编写一个Shell脚本,实现输入一个目录,输出该目录下所有文件名和文件大小。
#!/bin/bash# 获取目录路径read -p "请输入目录路径:" dir_path# 判断目录是否存在if [ ! -d "$dir_path" ]; thenecho "目录不存在!"exit 1fi# 遍历目录下所有文件for file in "$dir_path"/*do# 判断是否是文件if [ -f "$file" ]; then# 获取文件名和大小file_name=$(basename "$file")file_size=$(du -h "$file" | awk '{print $1}')echo "$file_name : $file_size"fidone使用方法:➢将以上代码保存为一个.sh文件,例如:`list_files.sh`➢给该文件添加执行权限:`chmod +x list_files.sh`➢在终端中运行该脚本:`./list_files.sh`,然后输入目录路径即可。
3. 编写一个Shell脚本,实现输入一个字符串,输出该字符串中所有大写字母的个数。
脚本的基本思路是遍历输入的字符串,对于每个字符,判断是否为大写字母,如果是则计数器加一。
shell脚本编程(完结版)
if [ 条件表达式 2 ] then …… …… else …… …… fi
命令串; else
命令串; fi
如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦
1. 整数测试运算
test int1 -eq int2: 判断两个数是否相等 test int1 -ne int2: 判断两个数是否不相等 test int1 -gt int2: 判断整数 1 是否大于整数 2 test int1 -ge int2: 判断整数 1 是否大于等于整数 2 test int1 -lt int2: 判断整数 1 是否小于整数 2 test int1 -le int2: 判断整数 1 是否小于等于整数 2 整数测试也可以使用 let 命令或双圆括号 相关操作为:== 、!= 、> 、>= 、< 、<= 如: x=1; [ $x -eq 1 ]; echo $? x=1; let "$x == 1"; echo $? x=1; (($x+1>= 2 )); echo $? 两种测试方法的区别: 使用的操作符不同 let 和 双圆括号中可以使用算术表达式,而中括号不能 let 和 双圆括号中,操作符两边可以不留空格
1. 整数测试运算 .................................................4 2. 字符串测试运算 ...............................................4 3. 文件测试运算 .................................................5 4. 逻辑运算 .....................................................5 第二节 在 shell 脚本中进行条件控制 ................................ 5 第三节 在 shell 脚本中进行 for 循环 ................................ 7 第四节 在 shell 脚本中进行 while 循环 .............................. 8 第五节 在 shell 脚本中使用 util 循环 ............................... 8 第六节 在 shell 脚本中使用函数 .................................... 8 第七节 shell 脚本之 echo 和 expr 讲解 ................................ 9 第八节 shell 脚本循环终止之 break 和 continue ..................... 10 第九节 shell 脚本之 exit 和 sleep ................................. 11 第十节 shell 脚本之 select 循环与菜单 ............................. 11 第十一节 shell 脚本之循环控制 shift 命令 .......................... 11 第十二节 shell 脚本之字符串操作 ................................... 11 第十三节 shell 脚本之数组实现 ..................................... 12 第十四节 shell 脚本之脚本调试 ..................................... 12 第十五节 shell 脚本之编程小结 ..................................... 12 程序例程 ......................................................... 14 习题实训 ......................................................... 29 综合实例 ......................................................... 31 1. 需求分析....................................................31 2.系统设计 ....................................................31 3.程序代码 ....................................................31 声明 ............................................................. 35
linux shell 练习题
linux shell 练习题Linux Shell 练习题Linux Shell 是一种强大的命令行工具,用于管理和操作 Linux 系统。
它能够帮助用户完成各种任务,从简单的文件管理到复杂的系统配置。
为了提高自己的Shell 技能,下面是一些 Linux Shell 练习题,供大家练习和挑战。
1. 查找文件在 Linux 系统中,我们经常需要查找特定的文件。
请编写一个 Shell 脚本,能够在指定目录下查找包含特定关键词的文件,并将结果输出到一个文件中。
2. 文件备份文件备份是保护数据的重要手段。
请编写一个 Shell 脚本,能够将指定目录下的所有文件备份到另一个目录中,并在备份完成后显示备份的文件列表。
3. 文件统计统计文件中的行数、单词数和字符数是一项常见的任务。
请编写一个 Shell 脚本,能够统计指定文件的行数、单词数和字符数,并将结果输出到终端。
4. 文件排序文件排序是对文件内容进行整理和排序的一种方式。
请编写一个 Shell 脚本,能够对指定文件中的文本内容按照字母顺序进行排序,并将结果输出到一个新文件中。
5. 文件压缩文件压缩是减小文件大小、提高存储效率的一种方法。
请编写一个 Shell 脚本,能够将指定目录下的所有文件压缩成一个压缩包,并显示压缩包的大小。
6. 系统监控监控系统资源的使用情况是保证系统正常运行的重要手段。
请编写一个 Shell 脚本,能够实时监控系统的 CPU 使用率、内存使用率和磁盘空间,并将结果输出到终端。
7. 进程管理管理系统进程是保证系统稳定性和安全性的关键任务之一。
请编写一个 Shell 脚本,能够列出系统中所有正在运行的进程,并提供对进程的管理功能,如杀死指定进程等。
8. 网络连接网络连接是现代计算机的重要组成部分。
请编写一个 Shell 脚本,能够列出系统中所有的网络连接,并提供对连接的管理功能,如断开指定连接等。
9. 系统日志系统日志记录了系统的运行状态和事件信息。
Linux Shell编程复习 题集附答案
Linux Shell编程复习题集附答案Linux Shell编程复习题集附答案在本文中,我们将为您提供一份包含答案的Linux Shell编程复习题集。
通过这些题目的练习,您可以加深对Linux Shell编程的理解,并巩固所学知识。
一、基础知识题1. 什么是Shell?Shell是一种解释性的编程语言,用户可以通过Shell来与操作系统进行交互和控制。
答案:Shell是一种解释器,它接收用户的命令并将其转换为操作系统能够理解和执行的形式。
2. 常见的Linux Shell有哪些?答案:常见的Linux Shell有Bash、Zsh、Csh、Ksh等。
3. 如何查看当前使用的Shell是哪种类型?答案:可以使用echo $0命令查看当前使用的Shell类型。
4. 什么是环境变量?如何查看当前的环境变量?答案:环境变量是用来存储系统运行时的配置信息的变量。
可以使用echo $变量名命令查看当前环境变量的值。
5. 如何定义一个变量并给其赋值?答案:可以使用变量名=值的形式来定义并赋值一个变量。
二、基本命令题1. 如何查看当前所在的目录?答案:可以使用pwd命令来查看当前所在的目录。
2. 如何列出当前目录下的所有文件和文件夹?答案:可以使用ls命令来列出当前目录下的所有文件和文件夹。
3. 如何切换到某个目录?答案:可以使用cd命令加上目标目录的路径来切换到某个目录。
例如:cd /path/to/directory。
4. 如何创建一个新的文件夹?答案:可以使用mkdir命令加上目录名来创建一个新的文件夹。
例如:mkdir new_folder。
5. 如何复制一个文件?答案:可以使用cp命令加上源文件和目标文件的路径来复制一个文件。
例如:cp source_file target_file。
三、条件控制题1. 编写一个Shell脚本,判断一个文件是否存在,若存在则输出文件存在,若不存在则输出文件不存在。
shell 练习题 答案
shell 练习题答案Shell练习题答案1. 问题描述:下面是一个Shell练习题,请写出你认为的答案,并提供相应的解释和思路。
2. 答案:在这道练习题中,我们将探讨一些常见的Shell编程问题。
问题一:如何在Shell中输出Hello World?答案一:可以使用echo命令来输出Hello World。
具体的命令如下:```echo "Hello World"```解释:echo命令用于在终端或脚本中输出文本,它会将文本原样输出到屏幕。
在这里,我们将输出的文本设为Hello World。
问题二:如何在Shell中创建一个变量,并将其输出?答案二:可以使用以下命令创建一个变量,并将其输出:```my_variable="Hello Shell"echo $my_variable```解释:在第一行中,我们通过将文本"Hello Shell"赋值给变量my_variable来创建一个变量。
在第二行,我们使用echo命令将该变量的内容输出到屏幕。
问题三:如何在Shell脚本中使用if语句?答案三:以下展示了一个使用if语句的示例:```shellif [ 1 -eq 1 ]; thenecho "1 equals 1"fi```解释:在这个例子中,我们使用了if [ 1 -eq 1 ]这个条件判断语句。
条件判断部分被放在方括号内,-eq表示比较两个数是否相等。
如果条件成立(即1等于1),则会执行echo命令输出"1 equals 1"。
问题四:如何在Shell中遍历一个数组?答案四:以下是一个遍历数组的示例:```shellmy_array=("Apple" "Banana" "Orange")for item in "${my_array[@]}"; doecho $itemdone```解释:在这个例子中,我们先创建了一个名为my_array的数组,其中包含了三个元素(Apple、Banana和Orange)。
5个实用的shell脚本面试题和答案
5个实⽤的shell脚本⾯试题和答案这边提到的5个⾯试问题,延续之前的有关Linux⾯试问题和答案。
如果你是Tecmint的读者,你的⽀持我⾮常感谢。
1. 写⼀个shell脚本来得到当前的⽇期,时间,⽤户名和当前⼯作⽬录。
答案 : 输出⽤户名,当前⽇期和时间,以及当前⼯作⽬录的命令就是logname,date,who i am和pwd。
现在,创建⼀个名为userstats.sh⽂件,将下⾯的代码添加到它。
复制代码代码如下:#!/bin/bashecho "Hello, $LOGNAME"echo "Current date is `date`"echo "User is `who i am`"echo "Current directory `pwd`"给它添加执⾏权限,并且执⾏他。
复制代码代码如下:# chmod 755 userstats.sh# ./userstats.sh样例输出复制代码代码如下:Hello, aviCurrent date is Sat Jun 7 13:05:29 IST 2014User is avi pts/0 2014-06-07 11:59 (:0)Current directory /home/avi/Desktop2.写⼀个shell脚本,进⾏两个数字的相加,如果没有输⼊参数就输出错误信息和⼀⾏使⽤说明答案 : 下⾯是简单的shell脚本以及描述,如果没有命令⾏参数,它会抛出错误与如何使⽤脚本的说明。
再创建⼀个名为twonumbers.sh⽂件和下⾯的内容添加到⽂件⾥。
复制代码代码如下:#!/bin/bash# The Shebangif [ $# -ne 2 ]# If two Inputs are not received from Standard Inputthen# then execute the below statementsecho "Usage - $0 x y"# print on standard output, how-to use the script (Usage - ./1.sh x y )echo " Where x and y are two nos for which I will print sum"# print on standard output, “Where x and y are two nos for which I will print sum ”exit 1# Leave shell in Error Stage and before the task was successfully carried out.fi# End of the if Statement.echo "Sum of $1 and $2 is `expr $1 + $2`"# If the above condition was false and user Entered two numbers as a command Line Argument,it will show the sum of the entered numbers.给他添加可执⾏权限,并且执⾏。
习题07_Shell编程
习题07_Shell编程一、单选1. 下面哪个命令是用来定义shell的全局变量( D )。
A. exportfsB. aliasC. exportsD. export2.在Shell脚本中,用来读取文件内各个域的内容并将其赋值Shell变量的命令是(D )。
A. foldB. joinC. trD. read3. 当字符串用双引号(’’)括起来时,SHELL将(C )。
A. 解释引号内的特殊字符B. 执行引号中的命令C. 不解释引号内的特殊字符D. 结束进程4. 以下哪个环境变量表示当前路径( B )。
A. PATHB. PWDC. HOMED. ROOT5. shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言,(bash )是Linux的缺省shell。
6. 编写的Shell程序运行前必须赋予该脚本文件(执行)权限。
7. 对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用(shift )命令实现。
8. 为脚本程序指定执行权的命令及参数是(chmod a+x filename )。
9. 在shell编程时,使用方括号表示测试条件的规则是:方括号两边必有(空格)。
10. 输入了Shell命令的部分字符后按( tab )键可补全其余部分。
11.改变命令提示符的环境变量是(PS1 )。
11. grep -E '[Hh]enr(y|ietta)' file的功能是:(在文件File中查找Henry、henry、Henrietta或henrietta)。
12. 如下为命令终端下的一个截图:则,以下两句的执行结果是:(the home path is $HOME )。
path=‘the home path is $HOME’echo $path13. 以下为程序名为prog的程序内容。
则sh prog a b c d的执行结果为( C )。
set A B C Dshiftshiftecho $1三、简答1. 下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。
Linux编程_Shell脚本练习题
Linux编程_Shell脚本练习题1,编写shell脚本,计算1~100的和。
#! /bin/bashsum=0for i in `seq1100`;dosum=$[$i+$sum]doneecho $sum2,编写shell脚本,输⼊⼀个数字n并计算1~n的和。
要求:如果输⼊的数字⼩于1,则重新输⼊,直到输⼊正确的数字为⽌。
#! /bin/bashread -p "input number:" nsum=0;for((i=0;i<=$n;i++))dosum=`expr $sum + $i`doneecho $sum3,编写shell脚本,批量建⽴⽤户user_00、user_er_99。
要求:所有⽤户同属于users组。
#! /bin/bashgroupadd usersfor i in `seq -w09uesradd -g users user_0$i4done4,编写shell脚本,批量添加⽤户 jsj01-jsj09、jsj10-jsj99。
#! /bin/bashfor((i=1;i<20;i++));doif(i<10);thenjsj="jsj0$i";elsejsj="jsj$i";fiuseradd $jsjdone5,编写shell脚本,要求实现如下功能:当执⾏⼀个程序的时候,这个程序会让使⽤者选择boy或者girl;如果使⽤者输⼊B或者b时,就显⽰:He is a boy;如果使⽤者输⼊G 或者g时,就显⽰:He is a girl;如果是除了B/b/G/g以外的其他字符,就显⽰:I don’t know。
#! /bin/bashecho -n your choice:read choicecase $choice ing)echo"She is a girl.";;G)echo"She is a girl.";;b)echo"He is a boy.";;B)echo"He is a boy.";;*)echo"I don't know.";;esac6,编写shell脚本,实现两个变量之间的加减乘除运算。
shell编程题经典100例
shell编程题经典100例 1. 显示当前路径```shellpwd```2. 列出当前目录中的文件和目录```shellls```3. 创建一个新的目录```shellmkdir <目录名> ```4. 删除一个目录 ```shellrmdir <目录名> ```5. 删除一个文件 ```shellrm <文件名>```6. 复制一个文件```shellcp <源文件> <目标文件> ```7. 移动一个文件```shellmv <源文件> <目标文件> ```8. 重命名一个文件```shellmv <旧文件名> <新文件名> ```9. 创建一个符号链接```shellln -s <源文件> <符号链接> ```10. 显示一个文件的详细信息 ```shellls -l <文件名>```11. 显示一个目录的详细信息 ```shellls -ld <目录名>```12. 查找一个文件```shellfind <路径> -name <文件名> ```13. 搜索文本字符串```shellgrep <字符串> <文件>```14. 显示一个文件的指定行```shellhead -n <行数> <文件>```15. 显示一个文件的最后几行 ```shelltail -n <行数> <文件>```16. 比较两个文件```shelldiff <文件1> <文件2>```17. 合并两个文件```shellcat <文件1> <文件2> > <输出文件> ```18. 运行一个命令```shellcommand <参数>```19. 管道命令```shellcommand1 | command2```20. 重定向输出```shellcommand > <输出文件> ```21. 重定向输入```shellcommand < <输入文件> ```22. 使用环境变量```shellecho $PATH```23. 设置环境变量```shellPATH=/usr/bin:/bin export PATH```24. 创建一个脚本```shell#!/bin/bash# 脚本内容```25. 运行一个脚本 ```shell./<脚本名>```26. 调试一个脚本 ```shellbash -x <脚本名> ```27. 使用case语句 ```shellcase $1 in"start")# 执行启动命令;;"stop")# 执行停止命令;;esac```28. 使用if语句```shellif [ $1 -gt 10 ]; then# 执行条件为真的命令 else# 执行条件为假的命令 fi```29. 使用for循环```shellfor i in 1 2 3 4 5; do # 迭代执行命令done```30. 使用while循环```shellwhile [ $i -lt 10 ]; do # 循环执行命令i=$((i+1))done```31. 使用until循环```shelluntil [ $i -gt 10 ]; do # 循环执行命令i=$((i+1))done```32. 使用函数```shellfunction my_function() { # 函数体}my_function```33. 使用数组```shellarr=(1 2 3 4 5)echo ${arr[2]}```34. 使用字典```shelldeclare -A dictdict["name"]="John Doe" echo ${dict["name"]}```35. 使用正则表达式```shellif [[ $string =~ ^[[:alpha:]]+$ ]]; then # 匹配以字母开头的字符串fi```36. 使用管道符```shellls | grep "txt"```37. 使用换行符```shellecho -e "Line 1\nLine 2"```38. 使用引号```shellecho "This is a string with spaces"```39. 使用转义字符```shellecho "This is a string with a \n newline" ```40. 使用注释```shell# 这是一行注释```41. 使用条件?:```shellresult=$(if [ $condition ]; then echo "true"; else echo "false"; fi)```42. 使用切片```shellecho "${string:0:3}"```43. 使用join命令```shellecho $( IFS=","; echo "${array[]}" ) ```44. 使用read命令```shellread -p "Enter your name: " name```45. 使用变量赋值```shellvar=$(expr 1 + 2)```46. 使用算术运算```shell(( i++ ))```47. 使用逻辑运算符```shellif [[ $condition1 && $condition2 ]]; then # 条件 1 和条件 2 都为真fi48. 使用比较运算符```shellif [[ $var -gt 10 ]]; then # var 大于 10fi```49. 使用测试命令```shellif test -f <文件>; then# 文件存在```50. 使用getopts解析命令行参数 ```shellwhile getopts ":ab:" opt; do case $opt ina)flag_a=true;;b)arg_b=$OPTARG;; esac done```。
《Linux操作系统》课后习题7章
习题一、填空1.运行shell脚本的两种方法是。
2.执行下面脚本,输出结果是。
#!/bin/basha=123b=’456$a’c=”789$b”echo "a=$a b=$b c=$c"3.当前用户为root,执行下面脚本文件,输出结果是。
#!/bin/bashusername=aaaa=${username:+`whoami`}echo "a=$a username=$username"4.接收键盘输入的数据赋值给变量a,设置提示信息“enter a:”,接收字符格式为5以及等待用户输入时间为10s。
编写shell命令实现该操作。
5.echo命令用于变量值或字符串的输出,最后默认加上换行符,若取消行末的换行符,使用选项。
6.执行下面脚本,并输入“You are so kind!”,输出结果是。
#!/bin/bashread -p "please input a centense:" first second thirdecho "third is $third"7.表示整形数值幂运算的符号为。
8.echo "scale=3;9/2"|bc的输出结果是。
9.shell中逻辑操作符表示逻辑与的是,表示逻辑或的是。
10.执行下面shell脚本时,传递参数为2 4 6 8,for循环体循环次。
#!/bin/bashfor a in "$*"doecho $aDone二、选择1.下面关于预定义变量的表示方法和意义有误的是()。
A.$$当前进程的进程IDB.$@命令行所有参数(把所有参数当作整体)C.$#命令行上参数的个数D.$?最后一个命令的退出状态或上一个函数返回值。
2. 下面关于echo命令中部分控制字符作用正确的是()。
A.\f换页符B.\c回车符C.\b水平制表符D.\t向左删除3. 在shell中可以处理浮点型数据的数学计算命令是()。
实验 shell程序编写的亲测答案
done
编写一个shell脚本,打印任何数的乘法表。
如:
输入一个数2
打印:
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
…..
2 * 10 = 20
答案:
#!/bin/bash
read -p "input a integer:" x
for (( i=1; i<=10; i++))
[[ $x2 -eq 1 ]] && man mkdir>>mkdirHelp;cat mkdirHelp
[[ $x2 -eq 2 ]] && man rmdir>>rmdirHelp;cat rmdirHelp
[[ $x2 -eq 3 ]] && man ls>>lsHelp;cat lsHelp
File commands
Directory commands
List the users currently logged in
答案:
#!/bin/bash
echo "************Main Menu**************"
echo File commands
echo Directory commands
#!/bin/bash
flag=1
until [ $flag -eq 0 ]
do
echo "************Main Menu**************"
echo 1 File commands
shell 编程题
Shell 编程题以下是一个基于 shell 编程的题目集,覆盖了从基础的文件操作到复杂的系统调用的多个方面。
1. 文件操作**题目**:编写一个 shell 脚本,检查一个目录中的所有文件的MD5 哈希值是否都相同。
2. 文本处理**题目**:使用 awk 和 sed 命令,从文本文件中提取出所有的数字,并将它们相加。
3. 命令执行与重定向---------------**题目**:编写一个 shell 脚本,可以执行一个外部命令并获取其输出,然后基于该输出进行某些操作。
4. 变量与数据流-----------**题目**:使用 bash shell 脚本编写一个函数,该函数可以将一个字符串中的所有小写字母转换为大写。
5. 条件判断--------**题目**:编写一个 shell 脚本,判断两个文件是否相同(大小和内容)。
6. 循环结构--------**题目**:编写一个 shell 脚本,可以循环遍历一个目录下的所有文件,并对每个文件执行某个操作。
7. 函数与模块化-----------**题目**:编写一个 shell 函数,该函数可以接受一个目录作为参数,并统计该目录中的文件数量。
8. 并发与多线程(某些 shell 环境支持)----------------------**题目**:使用 bash 的并发特性,编写一个脚本,可以在多个线程中同时处理多个任务。
9. 系统调用与外部工具集成-----------------**题目**:编写一个 shell 脚本,该脚本可以调用外部工具(例如 grep、awk、sed 等)来处理文本数据。
10. 用户交互与图形界面(特定 shell 环境)-------------------------This topic is not specific to shell programming, but requires the use of a graphical user interface (GUI) toolkit such as GTK+ or Qt. Therefore, it cannot be covered in this document.。
shell脚本练习题
shell脚本例子集锦(习题总结)练习一:写一个脚本1.设定变量FILE的值为/etc/passwd2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`)Hello,root,your UID is 0.3.统计一个有多少个用户答案一:#!/bin/bashfile="/etc/passwd"LINES=`wc -l $file | cut -d" " -f1`for I in `seq 1 $LINES`;douserid=`head -$I $file | tail -1 |cut -d: -f3`username=`head -$I $file | tail -1 |cut -d: -f1`echo "hello $username,your UID is $userid"doneecho "there are $LINES users"答案二:#!/bin/bashfile=/etc/passwdlet num=0for I in `cat $file`;dousername=`echo "$I" | cut -d: -f1`userid=`echo "$I" | cut -d: -f3`echo "Hello,$username,your UID is $userid"num=$[$num+1]doneecho "there are $num users"练习二:写一个脚本1.切换工作目录至/var2.依次向/var目录中的每个文件或子目录问好,形如:(提示:for FILE in /var/*;或for FILE in `ls /var`;)Hello,log3.统计/var目录下共有多个文件,并显示出来答案:#!/bin/bashcd /varlet num=0for I in `ls /var/*`;doecho "hello $I"num=$[$num+1]doneecho "the number of files is $num"练习三:写一个脚本1.设定变量file的值为/etc/passwd2.使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容3.把这些行保存至/tmp/mypasswd文件中答案:#!/bin/bashfile="/etc/passwd"for I in 2 4 6 10 13 15;doexec 3>/tmp/mypasswdline=`head -$I $file | tail -1`echo "$line"echo "$line" >&3exec 3>&-done练习四:写一个脚本传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商答案如下:vim test.sh#!/bin/bashecho "first number $1" (表示输出第一个数)echo "second number $2" (表示输出第二个数)echo "$(($1+$2))" (输出两数之和)echo"$[$1-$2]" (输出两数之差)echo"$[$1*$2]" (输出两数之积)echo"$[$1/$2]" (输出两数之商):wq(表示保存并退出vi编辑器)chmod +xtest.sh (给test.sh执行的权限)./test.sh 23 (传递两个参数并执行脚本作业一:写一个脚本:1.创建目录/tmp/scripts2.切换工作目录至此目录中3.复制/etc/pam.d目录至当前目录,并重命名为test4.将当前目录的test及其里面的文件和子目录的属主改为redhat5.将test及其子目录中的文件的其它用户的权限改为没有任何权限答案:#!/bin/bashmkdir -v /tmp/scriptscd /tmp/scriptscp -r /etc/pam.d ./testchown -R redhat ./testchmod -R o=--- ./test作业二:写一个脚本1.显示当前系统日期和时间,而后创建目录/tmp/lstest2.切换工作目录至/tmp/lstest3.创建目录a1d,b56e,6test4.创建空文件xy,x2y,7325.列出当前目录下以a,x或者6开头的文件或目录6.列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录答案:#!/bin/bashdatemkdir -pv /tmp/lstestcd /tmp/lstestmkdir a1d b56e 6testtouch xy x2y 732ls [ax6]*ls [[:alpha:]][[:digit:]]*作业三:写一个脚本添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加答案:#!/bin/bashfor I in `seq 1 10`;docut -d: -f1 /etc/passwd |grep "user$I" 2>>/tmp/etc.err || useradd user$Idone作业四:写一个脚本通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线如果在线,就显示“ip is up”如果不在线,就显示“ip is down”答案: #!/bin/bashfor I in `seq 151 254`;doping -c1 -w1 192.168.0.$I &>/dev/null && echo "192.168.0.$I is up" || echo "192.168.0.$I is down"done例题:shell1.sh 显示日期和时间。
LINUX SHELL命令练习题
LINUX SHELL命令练习题(1)1)Linux 核心的许可证是什么?a. NDAb. GDPc. GPLd.GNU2)谁是Linux的创始人a. Turbolinuxb. AT&T Bell Laboratryc. University of Helsinkid. Linus Torvalds3)确定myfile的文件类型的命令是什么a. type myfileb. type -q myfilec. file myfiled. whatis myfile4)用来分离目录名和文件名的字符是什么a. slash (/)b. period (.)c. dash (-)d. asterisk (*)5)你想显示文件"longfile"的最后10行,下面那个命令是正确的(选择最合适的答案)a、tail logfileb、head -10 longfilec、tail -d 10 longfiled、head longfile6)假如你得到一个运行命令被拒绝的信息,你可以用哪个命令去修改它的权限使之可以正常运行a. path=b. chmodc. chgrpd. chown7)拷贝mydir\myfile文件到dir2目录下,但是系统提示这个文件已经存在,下面那个命令是正确的a、cp -w mydir\myfile dir2b、cp -i mydir\myfile dir2c、cp mydir\myfile dir2d、cp -v mydir\myfile dir28)下面那个命令允许对文件重命名(选择最合适的答案)a、rnb、rnamec、replaced、mv9)假如文件是按8进制来定义,下面那个值代表了读和写a、2b、6c、4d、110)linux临时目录一般存在下面那个文件夹中a、/tmpb、/procc、/datad、/dev11)一个文件的权限是-rw-rw-r--,这个文件所有者的权限是什么a、read-onlyb、read-writec、writed、read-write-excute12)下面哪个值代表多用户启动a、1b、0c、3d、513)下面哪个文件代表系统初始化信息a、/etc/inittabb、/etc/initc、/etc/procd、/etc/initproc14)哪条命令从当前系统切换到启动级别1a、inittab 1b、init 1c、level 1d、rlevel115)下面哪个选项能取消shutdown命令a、shutdown -cb、shutdown -xc、shutdown -ud、shutdown -n16)哪个符号加在命令后面可以在后台执行程序a. @b. &c. #d. *17)在vi编辑器里,哪个命令能将光标移到第200行a. 200gb. :200c. g200d. G20018)下面哪个配置文件用来定义syslog的后台进程a、system.confb、syslog.confc、syslogdd、slog.conf19)下面哪个syslog.conf代表httpd进程a、httpdb、procc、smtpd、daemon20)你给公司的新同事添加一个用户,你起初指定他的帐号在30天后过期,现在想改变这个过期时间,用下面哪个命令a、usermod -ab、usermod -dc、usermod -xd、usermod -e21)用下面哪个命令可以不用退出vi编辑器来切换文件a. :e for edit commandb. map commandc. export commandd. set command22)下面哪个选项用来添加用户定义用户登录的shella、-sb、-uc、-ld、-sh23)如果你想给变量"IQ"定义为4,下面哪些是正确的a、IQ=4b、set IQ=4c、set $IQ=4d、IQ set 424)在系统重建的时候,下面哪个参数能用来对mkfs命令检查坏块a、-bb、-ec、-cd、-check25)哪一个命令能用来查找在文件TESTFILE中只包含四个字符的行?a.grep '' TESTFILEb.grep '....' TESTFILEc.grep '^$' TESTFILEd.grep '^....$' TESTFILE26)哪一个命令能用来删除当前目录及其子目录下名为‘core'的文件?a.find . -name core -exec rm ;b.find . -name core -exec rm {} \ ;c.find . -name core -exec rm {} -;d.find . -name core -exec rm {} ;27)用标准的输出重定向(>)”>file01”能使文件file01的数据a. 被复制b. 被移动c. 被覆盖d. 被打印28)按_____键能中止当前运行的命令a. Ctrl-Db. Ctrl-Cc. Ctrl-Bd. Ctrl-F29)下面对Linux命令的描述哪个是正确的a. 不是大小写敏感的b. 都是大写的c. 大小写敏感d. 都是小写30)在vi编辑器里,命令”dd”用来删除当前?a. 字b. 字符c. 变量d. 行31)下列哪一个命令能被用来重定向管道的输出到标准输出和指定的文件中?a.catb.lessc.teed.wee32)spool文件系统放到什么位置a、/procb、/spoolc、/vard、/lpd33)下面哪个命令能去掉主引导信息里的内容a、fdisk /mbrb、format /mbrc、mbr /formatd、mbr /replace34)下面哪条命令可以显示交换内存a、showmemb、freememc、swapd、free35)下面哪条命令可以显示用户默认设置a、useradd -ub、show defaultsc、show user defaultsd、useradd –D36)下面哪段定义了添加一个tar文件的信息a、use the append commandb、use the add commandc、use the tar command with the -a switchd、use the tar command with the -r switch37)在vi中下列哪些命令可以用来在光标前插入文本?a. p [text]b. a [text]c. i [text]d. o [text]38)关于linux下列说明哪些是正确的?a. Linux 是一个开放源码的操作系统.b. Linux 是一个类UNIX的操作系统.c. Linux 是一个多用户的操作系统.d. Linux 是一个多任务的操作系统.39)哪些命令组合起来能统计多少用户登录系统a.who | wc -wb.who | wc -lc.who | wc -cd.who | wc40)如果你对文件和目录的权限不确定,则不能用 _______命令来检测权限.a. psb. ls -lc. ckd. chown41)下面哪些环境变量是在Turbolinux shell下被定义的?a. PATHb. CDc. PS1d. TERM42)创建一个用户帐号需要在/etc/passwd中定义哪些信息a、login nameb、password agec、default groupd、userid43)在本地的文件系统中下列哪些linux路径结构是无效的?a. //usr\zhang/memob. \usr\zhang\memoc. /usr/zhang/memod. \usr/zhang/memo44)Turbolinux支持哪些编程语言a.Perlb.Pythonc.C++d.Fortran45)echo命令可以用来显示?a. 参数b. 文本字符c. 过滤内容d. shell 变量LINUX SHELL命令练习题(2)1、下列那一个指令能用来列出目录的内容?A. lsB. psC. rmD. del2、下列那一个指令能用来显示文件的内容?A. psB. rmC. cdD. cat3、下列那一个指令能转换目录?A. psB. lsC. cdD. rm4、下列那一个指令能清除屏幕?A. clsB. clearC. checkD. put5、下列那一个指令能显示目前的路径?A. showB. cdC. pwdD. more6、下列那一个指令无法用来分页显示文件内容?A. moreB. lessC. cat file | moreD. ps7、下列那一个指令能拷贝文件?A. rmB. cdC. talkD. cp8、下列那一个指令能新建空目录?A. mkB. dirC. rmdirD. mkdir9、下列那一个指令能在文件中搜寻关键词?A. psB. catC. moreD. grep10、下列那一个指令能删除空目录?A. rmdirB. moreC. cpD. cls11、下列那一个指令能删除文件?A. cpB. mkdirC. rmD. rmdir12、下列那一个指令能新建一个空文档?A. rmB. pwdC. moreD. touch13、下列那一个指令能变更系统时间?A. timeB. dateC. clockD. settime14、下列那一个指令能新增使用者账号?A. adduserB. newuserC. getuserD. nuser15、下列那一个指令能设定使用者的密码?A. pwdB. newpwdC. passwdD. password16、下列那一个指令能转换使用者身份?A. passwdB. logC. whoD. su17、下列那一个指令能显示磁盘剩余空间?A. ddB. dfC. dwD. du18、下列那一个指令能显示目录的大小?A. ddB. dfC. duD. dw19、下列那一个指令能用来搜寻文件?A. findB. ffindC. fwhereD. fwho20、下列那一个指令能用来挂载文件系统?A. muntB. mountC. unmountD. umont21、下列那一个指令能用来卸载文件系统?A. umountB. unmountC. mountD. umont22、下列那一个指令能用来格式化软盘?A. formatB. fdC. fdformatD. mkdir23、下列那一个指令能用来制作启动盘?A. mkdirB. mkdiskC. mkbootdiskD. mktemp24、下列那一个指令能用来显示进程?A. dsB. psC. asD. ms25、下列那一个不是压缩指令?A. compressB. gzipC. bzip2D. tar26、下列那一个指令能用来将某一个目录打包成一个文件?A. tarB. cheeseC. queeD. wzip27、下列那一个指令能用来改动文件目录的权限属性A. chownB. chmodC. chshD. chpwd28、下列那一个指令能用来改动文件拥有者及群组?A. chownB. chmodC. chshD. chpwd29、下列那一个指令能用来改动shell的使用种类?A. chownB. chmodC. chshD. chpwd30、下列那一个指令能用来查看谁在在线?A. whomB. whoC. whoamiD. ww31、下列那一个指令能用来查看系统负载情形A. wB. whoC. loadD. ps32、下列那一个指令能用来显示使用者自己是什么身份?A. psB. whoamiC. whoD. w33、下列那一个指令能用来查看核心版本等信息?A. showB. unameC. nameD. system34、下列那一个指令能用来显示主机名称?A. hostB. digC. hostnameD. nslookup35、下列那一个指令能用来显示网卡的设定情形?A. ifB. ifconfC. ifconfigD. eth036、下列那一个指令能用来显示开机过程的重要讯息画面?A. dmesgB. mesgC. showsysD. dump37、下列那一个指令能用来查看内存?A. mfB. freeC. memoryD. memshow38、下列那一个指令能用来查看程序执行的情形和内存?A. topB. freeC. showpsD. memrun39、下列那一个指令能用来查看系统负载及已开机天数?A. wB. powerC. bootdirD. uptime40、下列那一个指令能用来关机?A. poweroffB. shutdownC. rebootD. closeboot41、下列那一个不能用来重启?A. init 0B. rebootC. shutdownD. init 642、下列那一个指令能用来转换至不同的runlevels?A. telB. telinitC. gotoD. reboot43、下列那一个指令能用来显示网络连结,路由表,网络接口状态等信息?A. netstatB. psC. netD. shownet44、bash 是指一种?A. shellB. batch commandC. cgiD. asp45、忘了root密码应该怎么处理?A. 重装系统B. 关机C. 进入单人模式,用passwd重设密码D. 制作启动盘46、文件权限755 , 对文件拥有者而言, 何义?A. 可读,可执行, 可写入B. 可读C. 可读,可执行D. 可写入47、目录权限711 , 对其他人(非目录拥有者)而言, 何义?A. 可执行B. 可进入C. 可读,可执行D. 可写入48、rw-rw-rw- 的权限属性, 用八进制数字系统, 怎么表示?A. 555B. 444C. 777D. 66649、rw-r----x 的权限属性, 用八进制数字系统, 怎么表示?A. 641B. 341C. 541D. 44150、何谓具suid 权限?A. 程序只有root才能执行B. 程序只有文件拥有者才能执行C. 程序只有nobody才能执行D. 执行时和文件拥有者具相同身份LINUX SHELL命令练习题(3)1.cron 后台常驻程序(daemon) 用于:A. 负责文件在网络中的共享B. 管理打印子系统Manages the printing subsystemC. 跟踪管理系统信息和错误D. 管理系统日常任务的调度(scheduling)2.在大多数Linux发行版本中,以下哪个属于块设备(block devices) ?A. 串行口B. 硬盘C. 虚拟终端D. 打印机3.下面哪个Linux命令可以一次显示一页内容?A. pauseB. catC. moreD. grep4.怎样了解您在当前目录下还有多大空间?A. Use dfB. Use du /C. Use du .D. Use df .5.怎样更改一个文件的权限设置?A. attribB. chmodC. changeD. file6.假如您需要找出/etc/my.conf 文件属于哪个包(package) ,您可以执行:A. rpm -q /etc/my.confB. rpm -requires /etc/my.confC. rpm -qf /etc/my.confD. rpm -q | grep /etc/my.conf7.假如当前系统是在level 3 运行,怎样不重启系统就可转换到level 5 运行?A. Set level = 5B. init 5C. run 5D. ALT-F7-58.那个命令用于改变IDE 硬盘的设置?A. hdparamB. ideconfigC. hdparmD. hddparm9.下面哪个命令可以列出定义在以后特定时间运行一次的所有任务?A. atqB. cronC. batchD. at10.下面命令的作用是:set PS1="[uwt]\$",export PS1A. 改变错误信息提示B. 改变命令提示符C. 改变一些终端参数D. 改变辅助命令提示符11.作为一个管理员,你希望在每一个新用户的目录下放一个文件.bashrc ,那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下。
linux shell练习题
linux shell练习题Linux Shell是一种基于文本界面的操作系统Shell,可以通过Shell 命令来管理和操作计算机系统。
对于初学者来说,掌握Shell语言是非常重要的。
在本篇文章中,将为你提供一些Linux Shell练习题,帮助你巩固和提升自己的Shell编程技能。
1. 练习题一:文件处理a) 在当前目录下创建一个名为"mydir"的目录。
b) 在"mydir"目录中创建一个名为"mytext.txt"的空白文件。
c) 将"mytext.txt"文件的权限设置为只读。
d) 在"mydir"目录下创建一个名为"mycopy.txt"的文件,并将"mytext.txt"的内容复制到"mycopy.txt"中。
e) 删除"mytext.txt"文件。
2. 练习题二:文本处理a) 创建一个名为"mytext.txt"的文本文件,并在文件中写入以下内容:```Hello, world!This is a test file.This file will be used for text processing exercises.```b) 统计"mytext.txt"文件中的行数、单词数和字符数。
c) 在"mytext.txt"文件中,将所有的"test"替换为"practice"。
d) 在"mytext.txt"文件的每一行前加上行号,并将其保存到一个新文件中。
3. 练习题三:条件语句和循环a) 输入一个数字,判断该数字是正数、负数还是零,并输出相应的提示信息。
b) 输入一个字符串,判断该字符串是否为回文字符串(正序和逆序均相同),并输出相应的结果。
shell编程
1.shell编程(40分)(1)在/home目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
(2)设计一个shell程序,删除题1中的50个目录。
Cd homeI=1while test $i -le 50domkdir user${i}chmod u+rwx user${i}chmod g+rx user${i}chmod o+r user${i}i=`expr $i + 1`doneecho “program end”Cd homeI=1while test $i -le 50dorm -t user${i}i=`expr $i + 1`doneecho “program end”2.设计一个shell程序,备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
Shell程序fileback存放在/usr/bin 目录下。
(40分)3.用Shell编程,判断一输入文件名的类型,根据不同类型给出提示信息。
(20分)filename=echo “please input a filename”read filenameif [ -f $filename ]then echo”It is a file”elif [ -d $filename ]then echo”It is a directory”fi4.计算1+1/2+1/3+1/4+…+1/100,并输出结果。
(20分)#include<stdio.h>int main(){int i=1;double sum=0.0;while(i<=100){sum=(double)1/i+sum;i++;}printf("The sum is %f\n",sum);return 0;}5.编写一个shell程序,根据用户的输入数据提示显示相应的文字:(30分)(A) 如果用户输入的字符串为”yao”,”luo”,”du”,则先输出”welcome ”字符串,然后输出用户输入的字符串,再输出”you are successful to login!”.(B) 如果用户输入的是其它字符串,则输出”sorry, access denied!”.String=echo “please input a string”read stringif test ${string} = ”yao” || test ${string}= ”luo” || test ${string}= ”du”thenecho "welcome "echo "$string"echo "you are successful to login!"elseecho "sorry,access denied"fiecho "program end"6.在根目录下建立四个文件m1.txt,m2.txt,m3.txt,m4.txt(文件内容任意),用Shell编程,实现自动创建m1,m2,m3,m4四个目录,并将m1.txt,m2.txt,m3.txt,m4.txt四个文件分别拷贝到各自相应的目录下。
自己整理的Linux课后习题
第一章认识linux系统1.简述linux系统的应用领域。
答:liunx系统的应用主要涉及四个方面:应用服务器、嵌入式领域、软件开发以及桌面应用,linux的长处主要在于服务器和嵌入式两个领域。
2.简述linux系统的特点。
答:1.开放性、2.多用户、3.多任务、4.良好的用户界面、5.设备独立性、6.丰富的网络功能、7.可靠的系统安全、8.良好的可移植性。
3.简述linux系统的组成。
答:linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。
4.简述linux和windows系统的区别与联系。
答:共性:1.都是多用户操作系统,2.支持多种文件系统,3.支持多种端口设备,4.支持联网功能,5.都提供服务。
区别:1.应用目标不同,2.图形界面化不同,3.文件扩展名不同,4.重新引导功能不同,5.命令区分大小写。
5.简述有哪些主流的linux发行版本。
答:1.Mandriva 2.Red Hat 3.SUSE 4.Debian 5.Ubuntu 6.Gentoo 7.Slackware 8.Red Flag 6.简述fedora 8系统的新特性。
答:1.新的Fedora 定制Spins 2.PulseAudio 3.Codec Buddy 4.新的外观 5.新的图形化防火墙配置工具system-config-firewall 6.已增强的打印机管理工具system-config-printer 7.无缝集成蓝牙设备8.Java 支持──IcedTea9.已改进的网络管理NetworkManager 0.7 10.更佳的笔记本电脑支持piz 和Compiz-Fusion 12.包管理改进13.在线桌面14..安全改进15.PolicyKi16.针对Xen、KVM 及QEMU 虚拟化的安全远程管理。
17.翻译基础架构Transifex:Transifex 是一个自由开源的Web 系统,它用来处理提交的翻译。
shell练习题
shell练习题1. 编写一个Shell脚本,要求用户输入一个数字,然后判断该数字是奇数还是偶数,并输出结果。
```shell#!/bin/bashecho "请输入一个数字:"read numif [ $((num % 2)) -eq 0 ]thenecho "$num 是偶数"elseecho "$num 是奇数"fi```2. 编写一个Shell脚本,实现计算器功能,要求用户输入两个数字和一个运算符(+、-、*、/),然后输出运算结果。
```shell#!/bin/bashecho "请输入第一个数字:"read num1echo "请输入第二个数字:"read num2echo "请输入运算符(+、-、*、/):" read operatorcase $operator in+)result=$((num1 + num2))echo "运算结果为:$result";;-)result=$((num1 - num2))echo "运算结果为:$result";;*)result=$((num1 * num2))echo "运算结果为:$result";;/)if [ $num2 -eq 0 ]; thenecho "除数不能为0"elseresult=$((num1 / num2))echo "运算结果为:$result"fi;;*)echo "无效的运算符";;esac```3. 编写一个Shell脚本,实现打印指定目录下所有文件及文件夹名称。
```shell#!/bin/bashecho "请输入目录路径:"read pathif [ -d $path ]; thenecho "目录下的文件和文件夹有:"ls -a $pathelseecho "输入的路径不是一个有效的目录"fi```4. 编写一个Shell脚本,用于备份指定文件或文件夹到指定目录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题07_Shell编程一、单选1. 下面哪个命令是用来定义shell的全局变量( D )。
A. exportfsB. aliasC. exportsD. export2.在Shell脚本中,用来读取文件内各个域的内容并将其赋值Shell变量的命令是(D )。
A. foldB. joinC. trD. read3. 当字符串用双引号(’’)括起来时,SHELL将(C )。
A. 解释引号内的特殊字符B. 执行引号中的命令C. 不解释引号内的特殊字符D. 结束进程4. 以下哪个环境变量表示当前路径( B )。
A. PATHB. PWDC. HOMED. ROOT5. shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言,(bash )是Linux的缺省shell。
6. 编写的Shell程序运行前必须赋予该脚本文件(执行)权限。
7. 对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用(shift )命令实现。
8. 为脚本程序指定执行权的命令及参数是( chmod a+x filename )。
9. 在shell编程时,使用方括号表示测试条件的规则是:方括号两边必有(空格)。
10. 输入了Shell命令的部分字符后按( tab )键可补全其余部分。
11.改变命令提示符的环境变量是(PS1 )。
11. grep -E '[Hh]enr(y|ietta)' file的功能是:(在文件File中查找Henry、henry、Henrietta或henrietta)。
12. 如下为命令终端下的一个截图:则,以下两句的执行结果是:(the home path is $HOME )。
path=‘the home path is $HOME’echo $path13. 以下为程序名为prog的程序内容。
则sh prog a b c d的执行结果为( C )。
set A B C Dshiftshiftecho $1三、简答1. 下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。
#!/bin/shDIRNAME=`ls /root | grep bak` #(1)if [ -z "$DIRNAME" ] ; then #(2)mkdir /root/bak ; cd /root/bak #(3)fiYY=`date +%y` ; MM=`date +%m` ; DD=`date +%d` #(4)BACKETC=$YY$MM$DD_etc.tar.gz #(5)tar zcvf $BACKETC /etc #(6)echo "fileback finished!"答:#(1)获取/root中名称包含bak的文件或目录#(2)判断1结果为空#(3)创建目录/root/bak并进入该目录#(4)获取当前时间的年月日#(5)按照年(2位)月(2位)日(2位)_etc方式构造压缩文件名#(6)压缩etc目录并保存在/root/bak中6分程序功能:若/root/bak不存在则创建之,然后将/etc按日期打包保存于该目录中。
2分2. 什么是位置变量?shell的变量类型有哪些种?答:位置变量是指命令行上传递给程序的参数。
Shell变量可以分为:用户自定义变量、环境变量、位置变量、特殊变量3. 下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。
#!/bin/bash #(1)dir=$1 #(2)if [ -d $dir ] #(3)thencd $dir #(4)for file in *doif [-f $file ] #(5)thencat $file #(6)echo “end of file $file”fidoneelseecho “bad directory name $dir”fi答:#(1)使用/bin/bash解释脚本#(2)将位置变量1赋值给变量dir#(3)如果dir所指为目录#(4)将当前目录改为dir#(5)如果循环变量file所指是普通文件#(6)显示文件file的内容6分程序功能:若命令行参数是一个合法目录则显示该目录下所有普通文件的内容,否则显示错误的目录名信息。
4. 试编写一个SHELL程序,该程序能接收用户从键盘输入的100个整数,然后求出其总和、最大值及最小值。
答:#!/bin/shread maxmin=$maxsum=$maxi=1while [$i –lt 100]doread xsum=`expr $sum + $x`if [ $max –lt $x ]thenmax=$xfiif [ $ x –lt $min ]thenmin=$xfii=`expr $i + 1`doneecho "sum = $sum ; max = $max min = $min "5.创建一个shell 脚本,它从用户那里接收10个数,并显示已输入的最大的数。
参考程序:#! /bin/bashmax=0for((count=1 ; count <= 10 ; count = count+1))doecho -n "Enter number $count : "read valueif [ $max -lt $value ]thenmax=$valuefidone6. 有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?参考答案:(1)第一种方法:用户应使用crontab –e 命令创建crontab文件。
格式如下:0 0 * * sun cp –r /user/backup /tmp(2)第二种方法:用户先在自己目录下新建文件file,文件内容如下:0 * * sun cp –r /user/backup /tmp然后执行crontab file 使生效。
7.写一个shell 脚本,检查给出的串是否为回文(palindrome)。
参考程序:#! /bin/bashecho "Enter string"read strlen=`echo $str | wc -c`len=`expr $len - 1`l=`expr $len / 2`ctr=1flag=0while test $ctr -le $ldoa=`echo $str | cut -c$ctr`b=`echo $str | cut -c$len`if test $a -ne $bthen flag=1breakfictr=`expr $ctr + 1`len=`expr $len - 1`doneif test $flag -eq 0then echo "String is palindrome"else echo "String not a palindrome"fi8. 在UNIX/Linux系统中,环境变量是非常重要,在字符界面下试说明:(1) PA TH变量的作用,如何得到PA TH的值?(2) 在UNIX/Linux系统的超级用户的环境变量PATH中允许包含当前目录吗?(3) 若在超级用户的当前目录内有可执行文件mypro,如何执行它(写出执行时键盘输入内容)?(4) 如何使用该命令在后台执行(写出执行时键盘输入内容)?答:(1) PATH为命令搜索路径,可用echo $PATH命令显示;(2)UNIX/Linux的PATH变量内不允许包含当前路径(.);(3)./mypro;(4)./mypro &9. 设计一个shell程序计算n的阶乘。
要求:(1) 从命令行接收参数n;(2) 在程序开始后立即判断n的合法性,即是否有参数,若有是否为正整数,若非法请给错误提示;(3) 最后出计算的结果。
参考代码:#!/bin/shif [ $# -eq 0 ]; then echo -e "$0 no Params.\a\n"; exit 0; fix=`echo $1 | awk '/[^[:digit:]]/ { print $0 } ' `if [ "x$x" != "x" ] ; then echo -e "Input: $* error!\a"; exit 1; fifact=1;tmp=1while [ $tmp -le $1 ]dofact=$((fact*tmp));tmp=$((++tmp));doneecho "fact=$fact"4.Shell程序中,对用户变量赋值有哪些方式?简要说明每种赋值方式的使用方法。
(1)等号赋值1)在等号前后均不能有空格。
2)当需要将一个包含空格的字符串赋给用户变量时,应用单引号将该字符串括起来。
(2)键盘赋值由read命令来实现的。
用法为:read 用户变量名当shell程序执行到该行时,将等待用户从键盘输入,当用户按下回车键时shell把你输入的内容赋给用户变量。
(3)命令替换赋值用法为:用户变量=`命令`该语句将首先执行反向单引号之间的命令,然后将其执行后输出的内容赋给该用户变量,在这种赋值方式中,等号前后同样不能有空格,而且必须用反向单引号(即重音号)把命令括起来。
10. 编写1个弹出式菜单的shell程序并实现其简单的菜单功能:******************************************************** MENU ** 1.copy 2.rename ** 3.remove 4.find ** 5.exit ********************************************************即用户按下数字1,则提示用户输入源和目的文件名后执行复制;输入数字2,则提示用户输入要更名的文件或目录后执行更名操作;输入数字3,则提示用户输入要删除的文件并执行删除操作;输入数字4,则提示用户输入要查找的文件并执行查找操作;输入数字5,则退出该菜单shell程序的执行。
#! /bin/sh -clearwhile [ 0 ]; doecho "************************************************" echo " menu " echo " 1.copy 2.rename " echo " 3.remove 4.find " echo " 5.exit " echo "************************************************" echoecho -n " select:"read choiceechocase $choice in1)echo -n "source file:"read srcechoecho -n "destination fold:"read descp -arf $src $desif $?; thenecho "copy sucessful!"elseecho " copy fail"fi;;2)echo -n "the file to be renamed:"read srcechoecho -n "the new file:"read desmv $src $desif $?; thenecho "rename sucessful!"elseecho " rename fail"fi;;3)echo -n "the file to be removed:"read srcrm -rf $srcif $?; thenecho "remove sucessful!"echo " remove fail"fi;;4)echo -n "the file to be found:"read srcfind $HOME -name $src;;5) exit;;*) echo "Invalid option";;esacdone12. 编写shell程序,实现自动删除50个用户账号的功能。