shell脚本作业(答案)
LinuxShell自动化运维-课后习题答案

LinuxShell自动化运维-课后习题答案1.填空题(1)环境变量、位置变量和预定义变量。
(2)脚本名,所有的参数(3)使用read命令赋值、使用命令行的输出结果赋值、从文件读取赋值。
(4)hello(5)与,或2.选择题C(1)CB⑷AB3.思考题⑴Shell变量的自增运算符是i++和++i, i++表示先赋值再日加,++i表示先自加再赋值。
(2)be、expr^ let.编程题(1)#当变量a为null时那么var=bvar=${a-b}#当变量a为null或为空字符串时那么var=b var=${a:-b}(2)printf( "\033[字背景颜色;字体颜色m字符串\033[0m”);.填空题(1)顺序语句,分支语句(条件语句),循环语句。
12) if [条件表达式]then代码块1else代码块2fi(3)可读性较好,可执行条件一目了然。
(4)case变量值in条件表达式1)代码块1条件表达式2)代码块2条件表达式3)代码块3*)无匹配后代码块esac(5)if [条件表达式l];then代码块1elif [条件表达式2];then代码块2elif [条件表达式3);then代码块3else代码块4fi.选择题(1)CA(2)AD(3) A.思考题⑴IF语句和CASE语句相比,case语句的可读性较好,它把条件中所有可能出现的情况全部列出来了,可执行条件一FI 了然。
而且CASE语句的执行过程不像IF语句那样又一个逐项条件顺序比拟的过程。
CASE语句中条件句的次序是不重要的,它的执行过程更接近于并行方式。
2.编程题(1)#!/bin/bash#使用死循环实时显示ethO网卡发送的数据包流量while :doecho,本地网卡ethO流量信息如下:’ifconfig ethO | grep “RXpack” | awk '{print $5}'ifconfig ethO | grep “TXpack” | awk '{print $5}'sleep 1Done1.填空题⑴for变量名in取值列表do循环体done(2)for循环,while循环、util循环(3)用于守护进程或持续运行的程序,其中循环的次数可以是固定的,也可以不固定。
Shell 脚本面试题及答案

Shell 脚本面试题及答案一、Shell脚本是什么、它是必需的吗?一个Shell脚本是一个文本文件,包含一个或多个命令。
作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。
二、什么是默认登录shell,如何改变指定用户的登录shell?在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。
使用chsh命令可以改变默认的shell。
三、可以在shell脚本中使用哪些类型的变量?在shell脚本,我们可以使用两种类型的变量:①系统定义变量;②用户定义变量。
系统变量:是由系统系统自己创建的。
这些变量通常由大写字母组成,可以通过“set”命令查看。
用户变量:是由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。
四、如何将标准输出和错误输出同时重定向到同一位置?这里有两个方法来实现:方法一:2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )方法二:&> (如# ls /usr/share/doc &> out.txt )五、shell脚本中“$?”标记的用途是什么?在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。
六、如何在后台运行脚本?在脚本后面添加“&”。
七、"chmod 500 script" 做什么?使脚本所有者拥有可执行权限。
八、">" 做什么?重定向输出流到文件或另一个流。
九、& 和 && 有什么区别& - 希望脚本在后台运行的时候使用它;&& - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它。
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脚本,实现输入一个字符串,输出该字符串中所有大写字母的个数。
脚本的基本思路是遍历输入的字符串,对于每个字符,判断是否为大写字母,如果是则计数器加一。
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.给他添加可执⾏权限,并且执⾏。
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 笔试题

shell 笔试题以下是一些常见的Shell脚本笔试题,你可以参考这些题目来检验自己的Shell脚本编程能力。
写出创建一个空目录的Shell命令。
答案是:mkdir directory_name如何在一个文件中查找某一特定字符串?答案是:grep "string" file_name如何将两个字符串连接起来?答案是:使用加号+,例如:string1="Hello, " string2="World!" result=$string1$string2如何使用Shell脚本在多个文件中查找某一特定字符串?答案是:使用for循环和grep命令,例如:bash`for file in *; do grep "string" $file; done`如何将一个字符串中的所有单词首字母大写?答案是:使用tr命令和正则表达式,例如:bash`echo "hello world" | tr '[:lower:]' '[:upper:]' | sed 's/\b\(.\)/\u\1/g'`如何使用Shell脚本将一个文件中的所有行反向输出?答案是:使用tac命令,例如:tac file_name如何使用Shell脚本将一个文件中的所有行连接成一个字符串?答案是:使用cat命令和重定向,例如:cat file_name > output_file如何使用Shell脚本将一个文件中的所有行按行反向排序?答案是:使用sort命令和-r选项,例如:sort -r file_name如何使用Shell脚本将一个文件中的所有行按行反向排序并将结果输出到一个新文件中?答案是:使用sort命令、重定向和-o选项,例如:sort -r file_name > output_file。
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```。
shell 笔试题

shell 笔试题1、SHELL脚本test.sh权限为644,脚本没有执行权限的时候怎么执行test.sh脚本() [单选题] *A sh test.sh(正确答案)B python test.shC exec test.shD ./test.sh2、SHELL脚本中$0代表什么() [单选题] *A 脚本传递的所有参数B 脚本名(正确答案)C 脚本第一个参数D 脚本参数个数3、如下条件判断语句,输出内容为()name="zhangsan"if [ "$name" == "Xzhangsan" ];thenecho "true"elseecho "false"fi [单选题] *A trueB false(正确答案)4、文件表达式中,-x是什么权限() [单选题] *A 读权限B 写权限C 执行权限(正确答案)D 是否为目录5、while死循环中如何跳出当前循环() [单选题] *A continueB selectC break(正确答案)D goto6、read -s -t 30 -p命令中-s参数的含义是() [单选题] *A 静默输出(正确答案)B DEBUG模式输出C 结合-t参数,休眠7、SHELL脚本中如何执行函数() [单选题] *A sh 函数名B 函数名(正确答案)C function 函数名D ./函数名8、SHELL脚本函数如何返回字符串() [单选题] *A return 字符串B echo 字符串(正确答案)C print 字符串D printf 字符串9、SHELL脚本中单引号可以识别变量() [判断题] *对错(正确答案)10、SHELL脚本中函数return不可以返回字符串() [判断题] *对(正确答案)错11、SHELL脚本中continue指令是跳出本次循环进入下一次循环() [判断题] *对(正确答案)错12、SHELL脚本中双引号不能识别变量() [判断题] *对错(正确答案)13、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
分享70个经典的Shell脚本面试题与答案

分享70个经典的Shell脚本⾯试题与答案我们为你的⾯试准备选择了 70 个你可能遇到的 shell 脚本⾯试问题及解答。
了解脚本或⾄少知道基础知识对系统管理员来说⾄关重要,它也有助于你在⼯作环境中⾃动完成很多任务。
在过去的⼏年⾥,我们注意到所有的 linux ⼯作职位都要求脚本技能。
1) 如何向脚本传递参数 ?./script argument例⼦: 显⽰⽂件名称脚本./show.sh file1.txtcat show.sh#!/bin/bashecho $1(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。
)2) 如何在脚本中使⽤参数 ?第⼀个参数 : $1,第⼆个参数 : $2例⼦ : 脚本会复制⽂件(arg1) 到⽬标地址(arg2)./copy.sh file1.txt /tmp/cat copy.sh#!/bin/bashcp $1 $23) 如何计算传递进来的参数 ?$#4) 如何在脚本中获取脚本名称 ?$05) 如何检查之前的命令是否运⾏成功 ?$?6) 如何获取⽂件的最后⼀⾏ ?tail-17) 如何获取⽂件的第⼀⾏ ?head-18) 如何获取⼀个⽂件每⼀⾏的第三个元素 ?awk'{print $3}'9) 假如⽂件中每⾏第⼀个元素是 FIND,如何获取第⼆个元素awk'{ if ($1 == "FIND") print $2}'10) 如何调试 bash 脚本将-xv参数加到#!/bin/bash后例⼦:#!/bin/bash –xv11) 举例如何写⼀个函数 ?function example {echo "Hello world!"}12) 如何向连接两个字符串 ?V1="Hello"V2="World"V3=${V1}${V2}echo $V3输出HelloWorld13) 如何进⾏两个整数相加 ?V1=1V2=2let V3=$V1+$V2echo $V3输出3据 @kashu 的意见,本题的更佳回答为:两个整数相加,还有若⼲种⽅法实现:A=5B=6echo $(($A+$B)) # ⽅法 2echo $[$A+$B] # ⽅法 3expr $A + $B # ⽅法 4echo $A+$B | bc # ⽅法 5awk 'BEGIN{print '"$A"'+'"$B"'}' # ⽅法 614) 如何检查⽂件系统中是否存在某个⽂件 ?if [ -f /var/log/messages ]thenecho "File exists"fi15) 写出 shell 脚本中所有循环语法 ?for 循环 :foriin$(ls);doecho item:$idonewhile 循环 :#!/bin/bashCOUNTER=0while [ $COUNTER -lt 10 ]; doecho The counter is $COUNTERlet COUNTER=COUNTER+1doneuntil 循环 :#!/bin/bashCOUNTER=20until [ $COUNTER -lt 10 ]; doecho COUNTER $COUNTERlet COUNTER-=1done16) 每个脚本开始的#!/bin/sh或#!/bin/bash表⽰什么意思 ?这⼀⾏说明要使⽤的shell。
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 显示日期和时间。
习题07_Shell编程

#(5)如果循环变量file所指是普通文件
#(6)显示文件file的内容6分
程序功能:若命令行参数是一个合法目录则显示该目录下所有普通文件的内容,否则显示错误的目录名信息。
4.试编写一个SHELL程序,该程序能接收用户从键盘输入的100个整数,然后求出其总和、最大值及最小值。
答:#!/bin/sh
read max
min=$max
sum=$max
i=1
while [$i–lt 100]
do
read x
sum=`expr $sum + $x`
if [$max–lt $x]
then
max=$x
fi
if [$ x–lt $min]
then
min=$x
fi
i=`expr $i+1`
用户应使用crontab –e命令创建crontab文件。格式如下:
0 0 * * sun cp –r /user/backup /tmp
(2)第二种方法:
用户先在自己目录下新建文件file,文件内容如下:
0 * * sun cp –r /user/backup /tmp
然后执行crontab file使生效。
* 5.exit *
*******************************************************
即用户按下数字1,则提示用户输入源和目的文件名后执行复制;输入数字2,则提示用户输入要更名的文件或目录后执行更名操作;输入数字3,则提示用户输入要删除的文件并执行删除操作;输入数字4,则提示用户输入要查找的文件并执行查找操作;输入数字5,则退出该菜单shell程序的执行。
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 ,那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下。
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.$Iis up" || echo "192.168.0.$I is down"done例题:shell1.sh 显示日期和时间。
脚本作业答案

1、要求依次输入5个数值,判断哪个为最大值并打印出来;#!/bin/bashfor i in {1..5}doread -p "please input : " xecho $x >> tmpfiledonemax=`sort -n tmpfile | tail -1`echo "max=$max"#!/bin/bashread -p "please input: " xmax=$xfor i in {2..5}doread -p "please input: " yif [ $max -ge $y ]thenmax=$maxelsemax=$yfidoneecho max=$max2、执行脚本要求用户输入“I am fine”,并判断正确与否,正常输出OK,错误输出ERROR #!/bin/bashIFS=()read -p "please input (I am fine):" Nif [ $N = "I am fine" ];thenecho "ok"elseecho "ERROR"fi3、编写一个名为mul的脚本程序,要求输入一个参数为小于10的正整数。
先检查参数是否符合要求。
如果不符合要求,请给出提示;如果符合要求,分别输出其与1到9的乘积。
#! /bin/bashread -p "Please input Number(<10):" Ni=1if [ $N -ge 1 ]&&[ $N -le 9 ]thenfor i in {1..9}doecho "$i*$N=$((i*N))"doneelseecho "ERROR"fi4、通过ping命令测试192.168.0.151到192.168.0.252.4(这里设置为你自己的IP网段的151到254就可以了)之间的所有主机是否在线,如果在线,就显示“ip is up " ;如果不在线,就显示”ip is down“。
shell脚本练习(随机取名)

shell脚本练习(随机取名)1、写⼀个脚本,实现随机选⼈功能,脚本需传递⼀个参数进去,如 pick.sh 1 出现结果"家驹” pick.sh 3 出现结果 "落叶" "jason" "贾诩"等随机结果。
(pick.sh N 其中N可以为不⼤于总⼈数的任意数)#!/bin/bash#Author:星空刺#Date:2013-10-18#⽂件名必须是⼀⾏⼀个名字#设定必须有⼀个参数cat << EOFWarning:_file must be a name of a line!if not,please enter ctrl+c!2.\$1 must be exist and \$1 is an int greater than zero!3.\$1 must be between 0 and the maximum number of names!***************************************************************EOF[ $# -le 0 ] && echo'Error:$1 must be exist and $1 is an int greater than zero!' && exit#名字列表⽂件路径read -p 'Please input your name_file_path:' name_pathecho"***************************************************************"#获取⼀个数组赋值模式列表[ -z $name_path ] && echo'Name_file does not exist' && exitwhile read line;doname=(${name[*]} $line)done < $name_path#获取数组元素总个数new_name_c=${#name[@]}#判定脚本的参数是否在0~数组元素个数之间echo"The current file contains the names of $new_name_c!"[ $1 -gt $new_name_c ] || [ $1 -lt 0 ] && echo'But $1 must be between 0 and the maximum number of names!' && exitecho"***************************************************************"#利⽤for循环,循环脚本$1次for (( i=$1;i>=1;i-- ));do#通过$RANDOM获取随机数,并通过取余数获取到数组下标0~n内的⼀个元素ran=`echo"$RANDOM % $new_name_c" | bc`#每输出⼀个,则删除当前对应数组元素,并便于下次判定是否为空,若为空,则说明与上次获取⼀致if [ -n "${name[$ran]}" ];thenecho -n "${name[$ran]} "unset name[$ran]else#若为空,则i加1,即本次循环获取失败,不⾄于少获取⼀个let i++fidone。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11月25日作业1.将文件名改为小写字母
2. 显示指定文件的访问、修改、修改内容日期
3. 将一个文本文件空格删除
4. 比较两个目录,如果第一个目录的文件在第二个目录中存在则删除
5. 拥有回收站功能的删除脚本
输入脚本文件空格文件,选择删除还是还原,实现删除和还原
输入脚本文件空格文件,选择删除还是还原,实现删除和还原
6. 遍历目录机器下子目录
11月26日作业1、有一个文件z109.txt,显示第3~5行的内容。
方法1:
方法2:
2、判断文件z109是否存在,存在就删除掉,不存在就创建并为它创建一个副本。
3、查看用户信息。
=================================
课外练习:5. 拥有回收站功能的删除脚本(多功能版)
先显示回收站有4大功能:1、删除2、还原3、查看回收站4、清空回收站
根据选项,进行相应的操作。