首页 > 系统相关 >【Linux上机实验】新实验五 shell编程

【Linux上机实验】新实验五 shell编程

时间:2023-11-09 14:24:19浏览次数:46  
标签:shell read Enter number echo 实验 Linux n1 n2

【前 言】

愿,所有相遇,都恰逢其时!

愿,此刻心头,正满怀欣喜!

                 ---你好,朋友,欢迎你!
				 
				 ---对此篇博客中有任何问题和不懂的可以咨询QQ:2759590905

1.编写脚本,从键盘输入10个数,并计算这些数的和(用数组存放20个数)。

1.输入 vi sum.sh,创建一个名为"sum.sh"的文件。(这里的名字随便修改)
2.进入文本编辑模式,按下 i 键。
3.将下面的脚本内容粘贴到文本编辑器中:

#!/bin/bash
sum=0  #累加器清零
echo "Please enter 10 numbers:"
for((i=0;i<10;i++)) #循环从键盘读入5个数存入数组
do
	read num
	array[i]=$num	
done
for y in ${array[@]} #依次取出数组中的数作累加
do
	sum=`expr $sum + $y`  #或者 ((sum=sum+y)) 
done
echo "The sum is:$sum" #输出累加和

通过以下命令执行脚本

bash sum.sh

结果截屏:
image

2.在上一题的基础上,预先在文件file中存入10个数,用输入重定向功能将程序中的输入重定向到file文件,计算这10个数的和。

1.输入 vi file,创建一个名为"file"的文件。
2.进入文本编辑模式,按下 i 键。
3.在里面输入10个数(随便输入,输入一个回车一下,一共10行)

file文件里面的内容
image

1.打开vi sum.sh文件
2.命令模式下将之前的所有行删除(可以使用30dd删除,30是指删除第1行到30行)
3.将下面的脚本内容输入到脚本中:

#!/bin/bash
declare -a array # 声明数组
sum=0 # 累加器清零
# 从文件中读入10个数存入数组
i=0
while IFS= read -r num || [ -n "$num" ]; do
	array[i]=$num
	((i++))
done < "file"
# 获取数组中的每个数并累加
for y in "${array[@]}"
do
	sum=$((sum + y))
done
echo "The sum is: $sum"	# 输出累加和

通过以下命令执行脚本

bash sum.sh

结果截屏:
image

3.编写脚本,从命令行接收数值参数,并计算这些参数的和。

1.输入 vi total.sh,创建一个名为"total.sh"的文件。(这里的名字随便修改)
2.进入文本编辑模式,按下 i 键。
3.将下面的脚本内容粘贴到文本编辑器中:

#!/bin/bash
sum=0 #累加器清零
if [ $# -le 0 ]
then 
	echo -e "Please add parameters after executing the command."
	exit 0
fi
for y in $*
do
	sum=`expr $sum + $y` 
done
echo "The sum is:$sum"

执行脚本(用chmod命令改变脚本执行权限方法):

chmod u+x total.sh
bash total.sh 1 2 3 4(其中最后这几个数字是自己输入的,要接在脚本后面)

结果截屏:
image

4.参考上题,用移动位置参数方法实现从命令行接收各个参数数值并计算这些数值的和。

1.打开vi total.sh文件
2.命令模式下将之前的所有行删除(可以使用30dd删除,30是指删除第1行到30行)
3.将下面的脚本内容输入到脚本中:

#!/bin/bash
sum=0 # 累加器清零
# 循环遍历所有位置参数,并计算它们的总和
for arg in "$@"
do
	sum=$((sum + arg)) 
done
# 输出总和
echo "The sum is: $sum"

执行脚本

bash total.sh 23 22 34 34

结果截屏:
image

5. 编写脚本实现一个简单的计算器,可以提示用户输入并执行基本的算术运算,例如加法、减法、乘法和除法(本示例用了select语句实现菜单设计)。

1.输入 vi jsq.sh,创建一个名为"jsq.sh"的文件。(这里的名字随便修改)
2.进入文本编辑模式,按下 i 键。
3.将下面的脚本内容粘贴到文本编辑器中:

#!/bin/bash
PS3="Select the operation: "
select opt in add subtract multiply divide quit; 
do
	case $opt in
	add)
		read -p "Enter the first number: " n1
		read -p "Enter the second number: " n2
		echo "$n1 + $n2 = $(($n1+$n2))"
		;;
	subtract)
		read -p "Enter the first number: " n1
		read -p "Enter the second number: " n2
		echo "$n1 - $n2 = $(($n1-$n2))"
		;;
	multiply)
		read -p "Enter the first number: " n1
		read -p "Enter the second number: " n2
		echo "$n1 * $n2 = $(($n1*$n2))"
		;;
	divide)
		read -p "Enter the first number: " n1
		read -p "Enter the second number: " n2
		echo "$n1 / $n2 = $(($n1/$n2))"
		;;
	quit)
		break
		;;
	*)
		echo "Invalid option $REPLY"
		;;
	esac
done

执行脚本和结果截屏:

bash jsq.sh

image

6. 修改上题,用函数实现加减乘除功能。

1.打开vi jsq.sh文件
2.命令模式下将之前的所有行删除(可以使用50dd删除,50是指删除第1行到50行)
3.将下面的脚本内容输入到脚本中:

#!/bin/bash
# 函数:加法
function addition {
	echo "$1 + $2 = $(($1 + $2))"
}
# 函数:减法
function subtraction {
	echo "$1 - $2 = $(($1 - $2))"
}
# 函数:乘法
function multiplication {
	echo "$1 * $2 = $(($1 * $2))"
}
# 函数:除法
function division {
	if [ $2 -eq 0 ]; then
		echo "Error: Division by zero is not allowed"
	else
		echo "$1 / $2 = $(($1 / $2))"
	fi
}
PS3="Select the operation: "
select opt in add subtract multiply divide quit;
do
	case $opt in
		add)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			addition $n1 $n2
			;;
		subtract)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			subtraction $n1 $n2
			;;
		multiply)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			multiplication $n1 $n2
			;;
		divide)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			division $n1 $n2
			;;
		quit)
			break
			;;
		*)
			echo "Invalid option $REPLY"
			;;
	esac
done

执行脚本和结果截屏:

bash jsq.sh

image

7. 完善上一题功能,使其能进行浮点数运算,并保留2位小数(bc命令)。

1.打开vi jsq.sh文件
2.命令模式下将之前的所有行删除(可以使用70dd删除,70是指删除第1行到70行)
3.将下面的脚本内容输入到脚本中:

#!/bin/bash
# 函数:加法
function addition {
	result=$(echo "scale=2; $1 + $2" | bc)
	echo "$1 + $2 = $result"
}
# 函数:减法
function subtraction {
	result=$(echo "scale=2; $1 - $2" | bc)
	echo "$1 - $2 = $result"
}
# 函数:乘法
function multiplication {
	result=$(echo "scale=2; $1 * $2" | bc)
	echo "$1 * $2 = $result"
}
# 函数:除法
function division {
	if (( $(echo "$2 == 0" | bc -l) )); then
		echo "Error: Division by zero is not allowed"
	else
		result=$(echo "scale=2; $1 / $2" | bc)
		echo "$1 / $2 = $result"
	fi
}
PS3="Select the operation: "
select opt in add subtract multiply divide quit;
do
	case $opt in
		add)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			addition $n1 $n2
			;;
		subtract)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			subtraction $n1 $n2
			;;
		multiply)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			multiplication $n1 $n2
			;;
		divide)
			read -p "Enter the first number: " n1
			read -p "Enter the second number: " n2
			division $n1 $n2
			;;
		quit)
			break
			;;
		*)
			echo "Invalid option $REPLY"
			;;
	esac
done

执行脚本和结果截屏:

bash jsq.sh

image

8. 设计脚本,在用户主目录下建立一个userdata目录,在此目录下再建立5个子目录,即user1~user5,并设置每个子目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

1.输入 vi jb.sh,创建一个名为"jb.sh"的文件。(这里的名字随便修改)
2.进入文本编辑模式,按下 i 键。
3.将下面的脚本内容粘贴到文本编辑器中:

#!/bin/bash
# 切换至用户主目录
cd ~
# 创建userdata目录
mkdir -p userdata
# 切换至userdata目录
cd userdata
# 创建5个子目录user1到user5
for ((i=1; i<=5; i++))
do
	mkdir "user$i"
	# 设置权限
	chmod 751 "user$i"
done

执行脚本和结果截屏:

bash jb.sh

image

删除所建目录,恢复环境。

rm -rf jb.sh userdata

image

【后 言】

愿,所有相遇,都恰逢其时!

愿,此刻心头,正满怀欣喜!

                 ---你好,朋友,再见,加油!

标签:shell,read,Enter,number,echo,实验,Linux,n1,n2
From: https://www.cnblogs.com/whwh/p/17816847.html

相关文章

  • 大型数据库实验1
    实验环境:linux,Hadoop3.3.0实验内容与完成情况:1.熟悉常用的Linux操作1)cd命令:切换目录(1) 切换到目录“/usr/local”(2) 切换到当前目录的上一级目录(3) 切换到当前登录Linux系统的用户的自己的主文件夹 2)ls命令:查看文件与目录查看目录“/usr”下的所有文件和目录 ......
  • Linux第十一周学习报告
    进程管道 管道也是一种重定向,重定向字符控制输出到文件,管道控制输出到其他程序;它的作用是把上一个进程的输出作为下一个进程的输入,可以把多个进程连接到一起。 1、将etc/passwd中的用户按照UID数值大小排序,显示前三行,其中“-t”指定字段分隔符。“-k”指定字段,“-n”表示按......
  • Linux杂项
    groups可以查看用户组具体的用法可以参考终端的指南。usermod-aGsudo<用户名>将用户添加到sudo组。将用户添加到指定组,这样就拥有了权限。scp传输文件:我自己使用成功的案例:scp-rC:\zzk\env\video\[email protected]:/home/test/zzk/[email protected]:/......
  • Dalvik虚拟机是在Linux内核上面运行的吗?为什么能执行安卓APK程序?
    Dalvik虚拟机确实是在Linux内核之上运行的。它是安卓系统的关键组件,专门设计来执行APK文件中的代码。这里是它的工作原理和一个生活中的例子:工作原理:基于Linux内核:安卓系统基于Linux内核,这为安卓设备提供了底层功能,如硬件抽象、网络通信、安全机制等。Dalvik虚拟机:在Linux......
  • Linux第十周学习报告
    本周学习的是上周没有学完的I/O重定向(老师把上节课讲过的一部分又讲了一遍,这里重复的就不写进来了)1、在第三个终端中使用date>/dev/pts/4使其重定向到终端四,在终端四中输出时间  2、改变描述符为2的文件的输出方向,date命令是正确的,执行结果在终端显示;输入命令如果是错误......
  • 安卓系统的内核是Linux,但是它为什么能运行APK程序
    安卓系统虽然基于Linux内核,但是它并不直接运行Linux的二进制程序。安卓为其设备提供了一个特殊的运行环境,这个环境包括了一个叫做Dalvik虚拟机(在Android4.4及以后版本中被ART替代)的组件,它能够运行专门为安卓设计的APK文件中的程序。 这里有一个生活中的比喻: 想象Linux内核......
  • Linux操作系统5
    呢每周学的是i/o重定向与管道 主要还是重定向I/O重定向,打开一个终端三,输入date命令,会显示出当时时间。如果在date命令后面加上>,并且指向date。txt文件,那么结果机会写入该文件。还有一个passwd命令,使用该命令时,系统会产生一个进程,pid为10277.在/proc虚拟文件系统中,可以查看内核......
  • C语言程序设计 实验题目
      -----------------------------------------编号:一题目:选择结构程序设计目的:见指导书110页。实验内容:教材:习题3.6,习题3.7习题3.6:参考例1.2,使用if语句,或者使用条件表达式。习题3.7:参考教材例题3.13,教材299页的math.h,不要使用10<=x<20.“无定义”,其余值用printf显示“无......
  • 软件测试技术,软件项目管理 实验时间安排 2009春季
     2009年春季十一周课表时间星期一星期二星期三星期四星期五时间上1   计082  8:00-8:502    9:00-9:503     10:10-11:004     11:10-12:00下5      6      7 项目软061-062计082 计06314:10-15:008  15:10-16:009 答疑曲江 16:10-17:0010......
  • oraclelinuxJDK安装
    JDK下载Oracle官网从此处点击进入来到Oracle官网,点击Products(产品)找到Java并点击进去点击DownloadJava该按钮往下翻,找到Java8选择Linux系统,找到适合自己系统的安装包,我的是CentOS8x64点击下载,勾选1,点击2 接下来需要登陆Oracle账户才能下载,无账户的可......