【Linux上机实验】新实验五 shell编程
【前 言】
愿,所有相遇,都恰逢其时!
愿,此刻心头,正满怀欣喜!
---你好,朋友,欢迎你!
---对此篇博客中有任何问题和不懂的可以咨询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
结果截屏:
2.在上一题的基础上,预先在文件file中存入10个数,用输入重定向功能将程序中的输入重定向到file文件,计算这10个数的和。
1.输入 vi file,创建一个名为"file"的文件。
2.进入文本编辑模式,按下 i 键。
3.在里面输入10个数(随便输入,输入一个回车一下,一共10行)
file文件里面的内容
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
结果截屏:
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(其中最后这几个数字是自己输入的,要接在脚本后面)
结果截屏:
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
结果截屏:
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
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
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
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
删除所建目录,恢复环境。
rm -rf jb.sh userdata
【后 言】
愿,所有相遇,都恰逢其时!
愿,此刻心头,正满怀欣喜!
---你好,朋友,再见,加油!
本文来自博客园,作者:Cloudservice,转载请注明原文链接:https://www.cnblogs.com/whwh/p/17816847.html,只要学不死,就往死里学!