shell脚本练习题

合集下载

shell脚本基础练习题

shell脚本基础练习题

shell脚本基础练习题1、判断/etc/inittab⽂件是否⼤于100⾏,如果⼤于,则显⽰”/etc/inittab is a big file.”否者显⽰”/etc/inittab is a small file.”#!/bin/bash#判断⽂件⾏数是否⼤于100⾏if [ `wc -l /etc/inittab | awk '{print $1}'` -gt 100 ];then echo "/etc/inittab is a big file."else echo "/etc/inittab is a samll file."fi2、给定⼀个⽤户,来判断这个⽤户是什么⽤户,如果是管理员⽤户,则显⽰“该⽤户为管理员”,否则显⽰“该⽤户为普通⽤户”#!/bin/bash#判断⽤户类型`a=`id -u $1`if [ $a -eq 0 ];then echo "这是管理员⽤户"else echo "普通⽤户"fi3、判断某个⽂件是否存在#!/bin/bash#判断⽂件是否存在if [ -e $1 ];then echo "存在"exit 0else echo "不存在"fi4、判断当前系统上是否有⽤户的默认shell程序是否为bash程序,如果有,就显⽰有多个这类⽤户,否则就显⽰没有这类⽤户;【并且显⽰出那些⽤户是bash】⽅法⼀:#!/bin/bash#判断⽤户默认shell程序类型a=`grep "/bin/bash" /etc/passwd | wc -l`if [ $a -gt 0 ] ;then echo "存在bash⽤户有 $a 个"else echo "不存在"fi⽅法⼆:#!/bin/bash#判断⽤户的默认shell程序类型declare -i sum=`grep "/bin/bash" /etc/passwd | wc -l`if grep "/bin/bash" /etc/passwd &> /dev/null;then echo "存在 $sum 个⽤户,shell程序为/bin/bash" grep "/bin/bash" /etc/passwd | cut -d: -f1 exit 0else echo "没有这类⽤户"exit 1fi5,输⼊⼀个设备⽂件,输出这个设备⽂件的基本信息:#!/bin/bash#查看设备⽂件信息read -t 10 -p "输⼊⼀个设备⽂件名:" devname[ -z $devname ] && devname=`fdisk -l` && exit 1if [ -b /dev/$devname ];then fdisk -l /dev/$devname exit 0else echo "$devname 不是设备⽂件" echo "Usage:请输⼊⼀个设备⽂件,如 sda" exit 2fi6,shell编写99乘法表#!/bin/bash#99乘法表for i in `seq 9`;do for j in `seq 9`;do [ $j -le $i ] && echo -n -e "$i*$j=`echo $(($i*$j))`\t" done echo " "done7,统计netstat -tan类型declare -i L=0declare -i E=0declare -i o=0for i in $(netstat -tan | grep "^tcp" | awk '{print $6}');do if [ $i = LISTEN ];then let L++ elif [ $i = ESTALISHED ];then let E++ else let o++fidoneecho "坚挺的链接有: $L"echo "其他链接有: $o"echo "家⾥链接有: $E"8,计算1-100内偶数的和#!/bin/bash#1-100内偶数的和declare -i sum=0 for i in $(seq 0 2 100);do let sum+=$idoneecho "和 $sum"。

linuxshell脚本编程练习作业及答案(全)

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编程实验作业(含答案)

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 技能,下面是一些 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编程复习题集。

通过这些题目的练习,您可以加深对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脚本100例、练习使用

shell脚本100例、练习使用

shell脚本100例、练习使⽤1、编写hello world脚本#!/bin/bashecho"hello world"2、通过位置变量创建linux系统账户和密码#!/bin/bash#$1是执⾏脚本第⼀个参数 $2是执⾏脚本第⼆个参数useradd "$1"echo"$2" | passwd --stdin "$1"#测试脚本[root@template-host sh1]# sh2.sh aaa 123Changing password for user aaa.passwd: all authentication tokens updated successfully.#测试登录[root@template-host sh1]# su - aaa[aaa@template-host ~]$3、每周五使⽤tar命令备份 /var/log下的所有⽇志⽂件#!/bin/bashtar -czPf log-`date +%y%m%d`.tar.gz /var/log #加P是因为如果不加会出现错误:tar: Removing leading `/' from member names date和+之间注意有空格。

修改系统参数[root@template-host sh1]# crontab -e00 03 * * 5 /data/sh1/3.sh4、⼀键部署LNMP(RPM包版本)#!/bin/bash#此脚本需要提前配置yum源,否则⽆法配置成功。

本脚本使⽤于7.4yum -y install httpdyum -y install mariadb mariadb-devel mariadb-serveryum -y install php php-mysqlsystemctl start httpd mariadb #启动httpd、mariadbsystemctl enable httpd mariadb #加⼊开机⾃启动systemctl status httpd mariadb #查看是否成功5、实时监控本机硬盘内存剩余空间,剩余内存空间⼩于500M,根分区剩余空间⼩于1000M时,发送警报信息到命令⾏#!bin/bash#提取分区剩余空间单位:kbdisk_size=$(df / | awk'/\//{print $4}')#提取内存空间单位Mmem_size=$(free -m | awk'/Mem/{print $4}')while :doif [ $disk_size -le 512000 -o $mem_size -le 1024 ];thenecho"警报:资源不⾜"sleep5fidone6、随机⽣成⼀个100以内的随机数,提⽰⽤户猜数字,提⽰⽤户猜⼤了、猜⼩了、猜对了,直⾄⽤户猜对,脚本结束。

习题07_Shell编程

习题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)形式的语句进行解释,并说明程序完成的功能。

脚本练习题

脚本练习题
如果输入B或b,显示“good afternoon”
如果输入C或quit,退出整个程序
如果输入的是其他内容,显示一条错误信息
6、创建一个shell程序,问用户是否要查看当前目录的内容,提示
用户输入yes或者no,如果用户输入yes,则显示当前目录,如果输入no,则提问用户要查看哪个目录的内容,读取用户
# shell程序中命令行参数的个数
sh test1.sh a1 b2 c3
echo $#
@
?
1
4、创建一个shell脚本,检查命令行参数的个数,如果参数不是三个,显示一条错误信息,如果为三个,则显示这些参数。
5、创建一个脚本,提示用户输入,
如果输入A,显示“good morning”
8、编写脚本,删除上题建立的账户
9、编写一个shell,创建一个for循环,这个循环可以:
创建目录Adir、Bdir、Cdir、 Ddir、 Edir
将文件/etc/passwd拷贝到以上每个目录下
列出以上每个目录的内容
当循环结束时,显示“over”
输入的目录名,显示该目录的内容。如果输入非yes和no,则显示一条错误信息。如:
用户输入:xxj1002 2 28 则为小型机1002班创建xxj100202~xxj100228这些账户,
创建账户的同时为这些账户设置口令,口令为空

linux基础shell考试试卷

linux基础shell考试试卷

姓名___________联系方式__________中科院测试班linux-基础试卷一、选择题1.一个bashshell脚本的第一行是什么()A#!/bin/bashB.#/bin/bashC.#/bin/cshD./bin/bash2.下面哪个命令是用来定义shell的环境变量()A、exportfsB.aliasC.exportsD.export3.哪个命令可以将普通用户转换成超级用户()A.superB.passwdC.tarD.su4.在vi编辑器里,命令"dd"用来删除当前的()A.行B.变量C.字D.字符5.在一行内运行多个命令需要用什么字符隔开()A.@B.$C.;D.*6.按下()键能终止当前运行的命令A.Ctrl-CB.Ctrl-FC.Ctrl-BD.Ctrl-D7.显示用户的主目录的命令是什么?()A.echo$HOMEB.echo$USERDIRC.echo$ENVD.echo$ECHO12.在vi编辑器里,哪个命令能将光标移到第200行()A.g200B.G200C.:200D.200g8.以下哪个命令可以终止一个用户的所有进程()A.skillallB.skillC.killD.killall9vi中哪条命令是不保存强制退出()A.:wqB.:wq!C.:q!D.:quit10.vi中复制整行的命令是()A.y1B.yyC.ssD.dd11.以下对于shell用户变量的定义,不对的是()A.g_Linux=B.LINUX=2.6.30 C12.在终端里执行echo“currentpath:“‘`pwd`’“”结果是:()A.currentpath:/home/LinuxB.current path:’/home/Linux’C.currentpath:’`pwd`’D.currentpath:`pwd`二、填空题1.对于目录间的切换,跳转到上一级目录使用(),切换到当前用户的家目录()2.需要删除目录xx_linux下的所有文件及目录,并无需提示逐一删除,执行命令为()3.终端里执行a=100;b=20;echo&[$a+$b];echo$a+$b;结果分别是()()4.导出历史记录的最近20条记录到cmd.txt文本:()5、vim进入text.c文件里。

Linux编程_Shell脚本练习题

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脚本编程能力。

写出创建一个空目录的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例

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 笔试题

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脚本练习题

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 显示日期和时间。

shell 编程题

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.。

LINUXSHELL命令练习题

LINUXSHELL命令练习题

LINUXSHELL命令练习题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. du19、下列那一个指令能用来搜寻文件?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. as25、下列那一个不是压缩指令?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. whoami31、下列那一个指令能用来查看系统负载情形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. showsys37、下列那一个指令能用来查看内存?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. goto43、下列那一个指令能用来显示网络连结,路由表,网络接口状态等信息?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试题

SHELL 试题姓名:得分:一、选择题:1关于shell 中特殊字符说法错误的是()A 、星号(*):可以匹配任何字符串,包括空串。

B 、问号(?):?可以匹配文件名中的任何字符。

C 、中括号([]):可以匹配一个集合的元素。

D 、执行符号(&):“&”号使程序以后台的形式执行。

2关于shell 中&&,||,|,&说法错误的是()A 、command1 && command2:当且仅当:当且仅当command1执行失败后才执行command2 B 、command1 || command2:当且仅当:当且仅当command1执行失败后才执行command2 C 、command1 | command2:command1输出作为command2的输入D 、command1 & :command1后台执行3关于用户自定义变量说法错误的是()A 、在程序中变量需要事先说明类型。

B 、没有全程、局部的区别,变量可以随时随地定义。

C 、其名称是以字母开头的不包含空白字元的任何字符串,长度不限。

D 、其使用范围只限于程序运行期间。

4关于内置变量变量说法错误的是()A 、$0 Shell 所有参数B 、$n Shell 程序(或过程)的第n 个位置参数值,n=1..9 C 、$* Shell 程序所有的位置参数组成的字符串D 、$# Shell 程序的位置参数个数5下列方法给shell 变量var 赋值报错误的是()A var= ls –l B read var B read var C var=`ls -l` C var=`ls -l` C var=`ls -l` D var=$1 D var=$1 6给脚本shell.ksh 文件的所有者赋予可执行权限正确的语句()A chmod 644 shell.ksh B chmod 755 shell.ksh C chown 644 shell.ksh D chown 755 shell.ksh 7下列不能用于循环控制流程的()A 、for B 、while C 、util D 、go 8如果Shell 程序以"#!"开头,则"#!"后面所写的就是所使用的Shell ,而且要将整个路径名称指出来下列说法错误的是()A 使用Bourne Shell 程序开头是#!/bin/sh B 使用C Shell 程序开头是#!/bin/csh C 使用Korn Shell 程序开头是#!/bin/ksh D 使用/etc/perl 程序开头是#! /etc/perl 9下列说法错误的是( )A[ -f $file ] #名为 $file 的目录是否存在。

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.$Iis up" || echo "192.168.0.$I is down"done例题:shell1.sh 显示日期和时间。

linux shell练习题

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) 输入一个字符串,判断该字符串是否为回文字符串(正序和逆序均相同),并输出相应的结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

shell 脚本例子集锦(习题总结)练习一:写一个脚本1. 设定变量FILE 的值为/etc/passwd2. 依次向/etc/passwd 中的每个用户问好,并且说出对方的ID 是什么形如:(提示:LINE='wc -l /etc/passwd | cut -d" " -fl') 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=0 for I in 'cat $file';do username='echo "$I" | cut -d: -f1' userid='echo "$I" | cut -d: -f3' echo "Hello,$username,yourUID is $userid" num=$[$num+1] done echo "there are $numusers"练习二:写一个脚本1. 切换工作目录至/var2. 依次向/var 目录中的每个文件或子目录问好,形如:(提示:for FILE in /var/*; 或for FILE in 'ls /var';) Hello,log3. 统计/var 目录下共有多个文件,并显示出来答案:#!/bin/bashcd /varlet num=0for I in 'ls /var/*';do echo "hello $I" num=$[$num+1]done echo "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;do exec 3>/tmp/mypasswdlin e='head -$1 $file | tail -1' echo "$line" echo "$line" >&3 exec 3>&-done练习四:写一个脚本传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商答案如下:vim test.sh#!/bin/bash输出第一个数)echo "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/bash mkdir -v /tmp/scripts cd /tmp/scripts cp -r /etc/pam.d ./testchown -R redhat ./test chmod -R o=--- ./test作业二:写一个脚本1. 显示当前系统日期和时间,而后创建目录/tmp/lstest2. 切换工作目录至/tmp/lstest3. 创建目录a1d,b56e,6test4. 创建空文件xy,x2y,7325. 列出当前目录下以a,x 或者6 开头的文件或目录6. 列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录答案:#!/bin/bash date mkdir -pv /tmp/lstestcd /tmp/lstest mkdir a1d b56e 6test touch 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显示日期和时间。

#!/bin/bashecho “ current time is 'date' ”//date 要加反弓丨号shell2.sh显示文件名,并显示位置参数(执行时带一个参数)。

(①$0 是一个特殊的变量,它的内容是当前这个shell程序的文件名;②$1是一个位置参数,位置参数之间用空格分隔,shell 取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。

)#!/bin/bashecho “the program name is $0// $”0是一个特殊的变数echo “the first para is $1 // $1 是一个位置参数echo “the program exit ” // 执行时带一个参数如./shell2.sh abcdshell3.sh 判断并显示位置参数#!/bin/bashif [ -d echo else echo “$1”];then“$1 is directory ,existed ”“$1 does not exist ,now create itmkdir $1 echo “$1 is createdfi // 执行时带一个参数shell4.sh 问候用户#!/bin/bash user='whoami' case $user inteacher)echo “ hello teacher ” ;;root)echo “ hello root ” ;;*)echo “ hello $user,welcome ” esac1、求1+2+3+...+100的和是?#!/bin/bashSUM=0I=0while [ $I -le 100 ] doSUM=$((SUM+I))I=$((I+1))doneecho "由1+2+3+...+100的和是:$SUM"2、(基训十一) 在根目录下有四个文件m1.txt,m2.txt,m3.txt,m4.txt,用Shell 编程,实现自动创建m1,m2,m3,m4 四个目录,并将ml. txt,m2 ・txt,m3 ・txt,m4 ・txt四个文件分别拷贝到各自相应的目录下。

#!/bin/bashcd /touch m1・txt m2・txt m3・txt m4・txtI=1while [ $I -le 4 ]domkdir m$Icp m$I・txt m$II=$((I+1)) done3、(基训十二)编写一个名为myfirstshell.sh勺脚本,它包括以下内容a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。

b) 问候用户。

c) 显示日期和时间。

d) 显示这个月的日历。

e) 显示您的机器名。

f) 显示当前这个操作系统的名称和版本。

g) 显示父目录中的所有文件的列表。

h) 显示root 正在运行的所有进程。

i) 显示变量TERM、PATH和HOME的值。

j) 显示磁盘使用情况。

k) 用id 命令打印出您的组ID。

m) 跟用户说“ Good bye”#!/bin/bash# 09嵌入5号贾德进myfirstshell.sh she的简单编程user='whoami'case $user inroot)echo "hello root";;teacher)echo "hello teacher";;*)echo "hello $user,welcome"esacecho "日期和时间:'date'"echo •本月的日历:'cal'"echo "本机的机器名:'uname -n'"echo "当前这个操作系统的名称和版本:'uname -s;uname -r'"echo "父目录中的所有文件的列表:'ls ../'"echo "root正在运行的所有进程:' ps -u root' echo '变数TERM的值:$TERM" echo '变数PATH的值:$PATH"echo '变数HOME 的值:$HOME"echo "磁盘的使用情况:'df'"echo "用id 命令打印出你的组ID:'id -g'"echo "Good bye!"4、(基训十三)设计一个Shell程序,在/userdata目录下建立50个目录,即user1~ user50,并设置每个目录的权限为rwxr-xr—#!/bin/bashcd /userdataI=1 while [ $I -le 50 ] domkdir -p userdata/user$I chmod o-x user$I I=$((I+1)) done5、(基训十四)编写shell程序,实现自动删除50个用户账号的功能账号名为stud1 至stud50。

相关文档
最新文档