实验十四 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"。

shell练习题

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脚本,用于备份指定文件或文件夹到指定目录。

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脚本,实现输入一个字符串,输出该字符串中所有大写字母的个数。

脚本的基本思路是遍历输入的字符串,对于每个字符,判断是否为大写字母,如果是则计数器加一。

SHELL语法练习题

SHELL语法练习题

SHELL语法练习题1. 编写一个Shell脚本,实现将指定目录下所有后缀名为.txt的文件移动到指定目录下的backup文件夹中。

```shell#!/bin/bashsourceDir="/path/to/source" # 指定源目录backupDir="/path/to/backup" # 指定备份目录# 检查并创建备份目录if [ ! -d "$backupDir" ]; thenmkdir "$backupDir"fi# 移动txt文件到备份目录mv "$sourceDir"/*.txt "$backupDir"```2. 编写一个Shell脚本,实现统计指定目录下的文件数量、目录数量,并输出结果。

```shell#!/bin/bashtargetDir="/path/to/directory" # 指定目标目录# 统计文件数量fileCount=$(find "$targetDir" -type f | wc -l)echo "文件数量: $fileCount"# 统计目录数量dirCount=$(find "$targetDir" -type d | wc -l)echo "目录数量: $dirCount"```3. 编写一个Shell脚本,实现将指定目录下的所有文件和目录名称统一重命名为大写字母,并输出结果。

```shell#!/bin/bashtargetDir="/path/to/directory" # 指定目标目录# 遍历目录下的文件和目录,并进行重命名for file in "$targetDir"/*; donewFileName=$(basename "$file" | tr '[:lower:]' '[:upper:]')mv "$file" "$targetDir/$newFileName"doneecho "文件和目录已重命名为大写字母。

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

shell脚本作业(答案)

shell脚本作业(答案)

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、清空回收站
根据选项,进行相应的操作。

脚本练习题

脚本练习题
如果输入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编程_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脚本,实现两个变量之间的加减乘除运算。

5个Shell脚本编程入门练习例子

5个Shell脚本编程入门练习例子

5个Shell脚本编程⼊门练习例⼦例⼦⼀:绘制特殊图形复制代码代码如下:#!/bin/bashMAX_NO=0echo -n "Enter Number between (5 to 9) : "read MAX_NOif ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; thenecho "WTF... I ask to enter number between 5 and 9, Try Again"exit 1ficlearfor (( i=1; i=i; s-- ))doecho -n " "donefor (( j=1; j=1; i-- ))dofor (( s=i; s<=MAX_NO; s++ ))doecho -n " "donefor (( j=1; j<=i; j++ ))doecho -n " ."doneecho ""doneecho -e "\n\n\t\t\t Whenever you need help, is always there"你应该不会被上述例⼦中的“关键字”困扰了,很多都是你熟悉的,或者从它们的名字可以猜出它们的意思,如“max”设定某个变量的最⼤值,“for”是⼀个循环。

输出结果:复制代码代码如下:[root@tecmint ~]# chmod 755 Special_Pattern.sh[root@tecmint ~]# ./Special_Pattern.shEnter Number between (5 to 9) : 6.. .. . .. . . .. . . . .. . . . . .. . . . . .. . . . .. . . .. . .. ..Whenever you need help, is always there如果你有其它语⾔的编程基础,那么学习上⾯的脚本对你来说应该很容易。

Shell脚本的设计实验

Shell脚本的设计实验

3.5.5 实验5-Shell脚本的设计实验实验1:深入理解let命令的用法。

比如我们可以用+=、(())等方式来实现运算符let命令:let命令是bash shell内置命令,用来执行整型算术运算和数值表达式测试。

可用命令help let查看当前bash版本支持的let操作符。

1 $ i=5 or let i=5 //变量i被赋值为5。

2 $ let i=i+1$ echo $i6 // let命令给变量i加1。

在执行算术运算时,不需要用美元符来展开变量。

3 $ let "i = i + 2"$ echo $i8 //如果参数包括空白符,则需要使用引号。

4 $ let "i+=1"$ echo $i9 //简写的操作符+=,用来给变量i加1。

5 $ i=3 //变量i被赋值为5。

6 $ (( i+=4))$ echo $i7 //双括号可以用来代替let命令。

变量i的值加4。

7 $ (( i=i-2 ))$ echo $i5 // i的值减2。

也可以写作i-=2。

1)两个小括号内允许空格2)let、expr的区别:expr是个函数表达式必须加空格(不加空格会语法错误)、let是一个命令;二者都不能进行位运算;expr可以直接显示出来、let还需加echo语句才可以显示出来实验2:使用命令替换,通过位置变量的方式来实现一个平方的操作#!/bin/bash //脚本的第一行#!/bin/bash 告诉内核将由哪个shell 解释器来执行程序中的各行。

本例中是由bash解释器执行。

//# Scriptname: do_square //写脚本一定要按照规范化的写作方式,注明脚本名// 1 function square { //或者把function删除在square后加(),square后与{}之间加空格local sq # sq is local to the function //local可以用man来查看,local sq可以不要let "sq=$1 * $1"echo "Number to be squared is $1." //定义函数square。

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脚本,计算1-100的和1#!/bin/bash2 #caculate the sum of numbers from 1 to 10034 sum=05 for i in `seq 1 100`; do6 sum=$[$sum+$i]7 done8 echo $sum2、编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,输入的数字小于1则重新输入,直到输入正确的数字为止。

1 #! /bin/bash2 j=03 while [ $j -lt "1" ]; do4 read -p "请输入数字不能小于"1":" j5 done6 sum=07 for i in `seq 1 $j`;do8 sum=$[$i+$sum]9 done10 echo $sum3、编写shell脚本,把/root/目录下的所有目录拷贝到/tmp/目录下。

1.#! /bin/bash2.for i in `ls /root/`;do3.if [ -d $i ];then4.cp -r $i /tmp/5.fi6.done4、编写shell脚本,批量建立用户user_00,user_01,…,user_100并且所有用户属于users组。

1.#! /bin/bash2.i=03.for i in `seq 1 100`;do/doc/3f13846942.html,erdel -r user_0$i5.done5、编写shell脚本,截取文件test.log中包含关键词”abc”的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列。

1.#! /bin/bash2.awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt3.sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt4.awk '$1>10 {print $2}' /tmp/n2.txt6、编写shell脚本,判断输入的IP是否正确(IP的规则是,n1,n2,n3,n4,其中1<n1<255,0<n2<255,0<n3<255,0<n4<255).< p="">1.#! /bin/bash2.checkip() {3.if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ; then4.a=`echo $1 | awk -F. '{print $1}'`5.b=`echo $1 | awk -F. '{print $2}'`6.c=`echo $1 | awk -F. '{print $3}'`7.d=`echo $1 | awk -F. '{print $4}'`8.for n in $a $b $c $d; do9.if [ $n -ge 255 ] || [ $n -le 0 ]; then10.echo "the number of the IP should less than 255 and greate than 0"11.return 212.fi13.done14.else15.echo "The IP you input is something wrong, the format is like 192.168.100.1"16.return 117.fi18.}19.rs=120.while [ $rs -gt 0 ]; doa)read -p "Please input the ip:" ipb)checkip $ipc)rs=`echo $?`21.done22.echo "The IP is right!"7、自动编译安装httpd服务器的脚本1.#!/bin/bash2.# 自动编译安装httpd服务器的脚本3.cd /usr/src/httpd-2.2.17/4../configure --prefix=/usr/local/httpd --enable-so &> /dev/null5.make &> /dev/null6.make install &> /dev/null7.# ……8、查看内存占用情况#!/bin/bashUSED=$(free | grep "buffers/cache:" | awk '{print $3}')TOTAL=$(free | grep "Mem:" | awk '{print $2}') USAGE=$(expr $USED \* 100 / $TOTAL)echo "实际内存占用情况:$USAGE%"9、备份文件,及使用情况#!/bin/bashTARFILE=beifen-`date +%s`.tgztar zcf $TARFILE $* &> /dev/nullecho "已执行$0 脚本,"echo "共完成$# 个对象的备份"echo "具体内容包括:$*"10、MySQL数据库逻辑备份脚本#!/bin/bash# 这是一个简化的MySQL数据库逻辑备份脚本# 1. 定义数据库连接、目标库信息MY_USER="operator"MY_PASS="pwd123"MY_HOST="192.168.4.22"MY_CONN="-u $MY_USER -p$MY_PASS -h $MY_HOST"MY_DB1="studydb"MY_DB2="coursedb"# 2. 定义备份目录、工具、时间、文件名主体BF_DIR="/opt/qnzx_dbbak/"BF_CMD="/usr/local/bin/mysqldump"BF_TIME=`date +%Y%m%d-%H%M`NAME_1="$MY_DB1-$BF_TIME"NAME_2="$MY_DB2-$BF_TIME"# 3. 先导出为.sql脚本,然后再进行压缩(打包后删除原文件)cd $BF_DIR/$BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql $BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql/bin/tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &> /dev/null /bin/tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &> /dev/null 11、查看cup,用户,及内存情况#!/bin/bashecho "Running Processes: $(ps aux | wc -l)"echo "Login Users: $(who | wc -l)"echo "Usage of / Filesystem: $(df -h | grep "/$" | awk '{print $4}')"12、查看用户是否为root用户,是否能查看磁盘#!/bin/bashif [ "$USER" != "root" ]thenecho "错误:非root用户,权限不足!"exit 1fifdisk -l /dev/sda13、查看是否安装sysstat监控软件,及安装#!/bin/bashrpm -q sysstat &> /dev/nullif [ $? -eq 0 ]thenecho "已安装`rpm -q sysstat`"elseecho "未安装,尝试自动安装"RHEL_DIR="/media/cdrom/Server/"if [ -d $RHEL_DIR ]thencd $RHEL_DIRrpm -ivh sysstat-*.rpm && echo "安装完成。

Shell编程练习题

Shell编程练习题

1、编写一个shell脚本,完成功能:
1)显示文字“Waiting for a while….”
2)长格式显示当前目录下面的文件和目录,并输出重定向到
/home/file.txt文件
3)定义一个变量,名为s,初始值“Hello”
4)使该变量输出重定向到/home/string.txt文件
2、"编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。

3、编写一个shell脚本,利用for循环将当前目录下的.c文件移动到指定的目录,并按文件大小显示出移动后指定的目录的内容。

4、利用数组形式存放10个城市的名字,然后利用for循环把它们打印出来。

1、"#!/bin/bash
echo“Please wating….”
ls–l > home/tem1
a=“Hello”
echo$a > /home/tem2
2、#!/bin/bash
dir=$1
shift
while [ $1 ]
do
file=$1
cp $1 $dir
shift
done
ls $dir
3、#!/bin/bash
for file in *.c
do
cp ${file} ${1}
done
ls ${1} -lS
4、#!/bin/bash
name=(唐山北京天津保定秦皇岛廊坊石家庄邯郸承德邢台)for i in ${name[*]} do
echo $i
done。

shell练习题

shell练习题

shell练习题Shell练习题Shell是一种命令行解释器,它是Linux和Unix系统中最常用的一种。

通过Shell,用户可以直接与操作系统进行交互,并执行各种系统命令和脚本。

掌握Shell编程对于系统管理员和开发人员来说是非常重要的。

本文将介绍一些常见的Shell练习题,帮助读者提高对Shell的理解和应用。

1. 文件操作文件操作是Shell编程中最常见的任务之一。

以下是一些练习题,帮助读者熟悉文件操作命令:- 创建一个名为"test.txt"的文件,并写入一些文本内容。

- 使用cat命令查看文件的内容。

- 使用cp命令将文件复制到另一个目录。

- 使用mv命令将文件移动到另一个目录。

- 使用rm命令删除文件。

2. 目录操作目录操作是管理文件和文件夹的重要部分。

以下是一些练习题,帮助读者学习如何在Shell中进行目录操作:- 使用mkdir命令创建一个名为"test"的目录。

- 使用cd命令进入该目录。

- 使用pwd命令查看当前所在目录的路径。

- 使用ls命令列出当前目录下的文件和文件夹。

- 使用rmdir命令删除该目录。

3. 变量和参数Shell编程中,变量和参数的使用非常重要。

以下是一些练习题,帮助读者学习如何在Shell中定义和使用变量和参数:- 定义一个名为"name"的变量,将其值设置为你的名字,并打印出来。

- 编写一个脚本,接受一个参数,并将其打印出来。

- 编写一个脚本,计算两个参数的和,并将结果打印出来。

4. 条件判断和循环条件判断和循环结构是Shell编程中常用的控制结构。

以下是一些练习题,帮助读者学习如何在Shell中使用条件判断和循环:- 编写一个脚本,判断一个数字是否为偶数,并打印出结果。

- 编写一个脚本,使用for循环打印出1到10的数字。

- 编写一个脚本,使用while循环计算1到100的和,并打印出结果。

shell脚本基础练习

shell脚本基础练习
do
echo "$num"
done
5.
复制代码 代码如下:
#/bin/bash
echo "Please enter a user:"
read a
b=$(whoami)
if test $a = $b
then echo "the user is running."
else echo "the user is not running."
;;
*) echo "error"
;;
esac
21.yes/no返回不同的结构
复制代码 代码如下:
#!/bin/bash
clear
echo "enter [y/n]:"
read a
case $a in
y|Y|Yes|YES) echo "you enter $a"
;;
n|N|NO|no) echo "you enter $a"
;;
*) echo "error"
;;
esac
22.内置命令的使用
复制代码 代码如下:
#/bin/bash
clear
echo "Hello, $USER"
echo
echo "that's all folks! "
23.打印无密码用户
复制代码 代码如下:
#/bin/bash
echo "No Password User are :"

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

shell脚本练习

shell脚本练习

shell脚本练习随着网络的广泛使用,越来越多的人开始寻求利用网络技术改善自己的出口产品。

面对科技的发展和市场的竞争,企业有必要更进一步地提高它们自身的技术水平,更好地跟上市场的步伐。

脚本语言是一种用于编写程序的语言,是处理程序中更高级的指令,是无需编译器就可运行的,对于像网站开发、网络应用程序等这样的场景有着重要的意义。

脚本语言也可以帮助企业更好地处理复杂的操作,提高自身的技术水平。

因此,熟练掌握脚本语言成为企业商业发展的重要一环。

而ll 脚本可以说是最常被使用的一种脚本了,无论在网络应用的开发,还是企业管理都有着不可忽视的地位。

有许多企业都通过ll脚本来实现他们的业务需求,例如可以用ll脚本来实现自动化运维,可以用ll脚本来实现数据储存和处理,乃至还可以用ll脚本来构建可扩展的网站系统,这些都表明ll脚本的强大能力。

但是,要掌握一门脚本不是一件容易的事情,对于没有经验的人而言就更加困难了。

以使用ll脚本为例,一般情况下都需要掌握很多相关的知识,比如网络编程知识,面向对象编程知识,软件设计知识,数据库知识等,只有掌握了相关知识基础并且有着良好的编程习惯,才能更加熟悉ll脚本的使用。

为此,在学习ll脚本的过程中,练习是最重要的一环。

因为只有多多实践才能逐渐熟悉ll脚本的使用,从而更好地实现开发的目的。

另外也可以多多的参考书籍,充分利用各种资源,不断进行学习和实践,努力掌握ll脚本的用法。

同时,在学习ll脚本的过程中还可以参考现有的ll脚本框架,比如Laravel,这是一个非常受欢迎的PHP框架,它拥有大量功能,可以帮助开发者更轻松地搭建应用,使其具备良好的弹性。

另外现在也存在许多开源ll脚本框架可以参考,如Node.js、Angular.js等,这些框架都可以帮助开发者更快地完成应用的开发。

总之,学习ll脚本的确不是一件容易的事情,但是在不断的练习和实践中,就可以逐渐熟悉ll脚本的使用,帮助企业提升自身的技术水平,从而实现企业发展的愿景。

实验十四 shell脚本练习

实验十四 shell脚本练习

实验十四 shell脚本练习上机实验内容:打开终端后在[root@localhost ~]#后面输入自己名字一、基础题练习一:shell脚本初步1) 在家目录下新建目录script2) 编写第一个shell脚本,命名为sh01,并存放在/root/script目录中,脚本执行后要求在屏幕上显示当前用户的的用户名、家目录和uid, 3) 以2-3种方式来执行该脚本4) 编写第一个shell脚本,命名为sh02,并存放在/root/script目录中,要求执行后,打印一行提示“Please input your name:\,要求用户输入,然后再次打印一行提示“Please input your sex: \要求用户输入,最后在屏幕上显示姓名和性别。

练习二:shell脚本编写1、请编写一个脚本,其功能是将当前用户的根目录下的work目录打包为名为“user’s-workdir-in-YYMMDD”的tar包(提示:参考用date建立文件)要求:i)若该目录不存在,显示“dir not exist”ii)若该文件不是目录类型,显示“work is a type”,此处的type为文件类型2、编写一个脚本,其中包含一个打印函数,用于将多次输入的字符组合为一个字符串要求:i)使用函数实现新值的输出 ii)使用循环语句完成多个字符的输入,直到输入字符串EOF才完成字符串的累加 3、自我练习:设计一个运算器,实现“加、减、乘、除”功能。

(四则运算:符号使用+、-、*、/)4、编写一个脚本,求1到99中所有奇数的和。

5、撰写一个脚本,他的作用是:i) 先查看一下 /root/test/logical 这个名称是否存在;ii) 若不存在,则建立一个档案,使用 touch 来建立,建立完成后离开;iii) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为 logical ,之后离开;iv) 如果存在的话,而且该名称为目录,则移除此目录! 6、编写一个脚本,判断两个给定文件的新旧程度要求:i)用户输入两个文件的名称ii)分别判断这两个文件是否存在 iii)判断这两个文件的类型是否相同iv)判断这两个文件的拥有者操作权限是否相同 v)若这两个文件都存在,且类型和操作权限都相等,则将较新的文件复制到目录/tmp中,若两者的时间相同,则不做复制操作二、提高题1、请自行建立一个脚本,该脚本可以用来计算『您还有几天可以过生日』啊??感谢您的阅读,祝您生活愉快。

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

实验十四shell脚本练习
上机实验内容:
打开终端后在[root@localhost ~]#后面输入自己名字
一、基础题
练习一:shell脚本初步
1)在家目录下新建目录script
2)编写第一个shell脚本,命名为sh01,并存放在/root/script目录中,脚本执行
后要求在屏幕上显示当前用户的的用户名、家目录和uid,
3)以2-3种方式来执行该脚本
4)编写第一个shell脚本,命名为sh02,并存放在/root/script目录中,要求执行
后,打印一行提示“Please input your name:",要求用户输入,然后再次打印一
行提示“Please input your sex: "要求用户输入,最后在屏幕上显示姓名和性别。

练习二:shell脚本编写
1、请编写一个脚本,其功能是将当前用户的根目录下的work目录打包为名为“user’s-workdir-in-YYMMDD”的tar包(提示:参考用date建立文件)
要求:i)若该目录不存在,显示“dir not exist”
ii)若该文件不是目录类型,显示“work is a type”,此处的type为文件类型
2、编写一个脚本,其中包含一个打印函数,用于将多次输入的字符组合为一个字符串
要求:i)使用函数实现新值的输出
ii)使用循环语句完成多个字符的输入,直到输入字符串EOF才完成字符串的累加3、自我练习:设计一个运算器,实现“加、减、乘、除”功能。

(四则运算:符号使用+、-、*、/)
4、编写一个脚本,求1到99中所有奇数的和。

5、撰写一个脚本,他的作用是:
i) 先查看一下/root/test/logical 这个名称是否存在;
ii) 若不存在,则建立一个档案,使用touch 来建立,建立完成后离开;
iii) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为logical ,之后离开;
iv) 如果存在的话,而且该名称为目录,则移除此目录!
6、编写一个脚本,判断两个给定文件的新旧程度
要求:i)用户输入两个文件的名称
ii)分别判断这两个文件是否存在
iii)判断这两个文件的类型是否相同
iv)判断这两个文件的拥有者操作权限是否相同
v)若这两个文件都存在,且类型和操作权限都相等,则将较新的文件复制到目录/tmp 中,若两者的时间相同,则不做复制操作
二、提高题
1、请自行建立一个脚本,该脚本可以用来计算『您还有几天可以过生日』啊??。

相关文档
最新文档