Linux实验 Shell编程

  • 实验目的:
  1. 熟练掌握Shell程序的建立与执行;
  2. 掌握Shell变量的两种类型(Shell环境变量和用户自定义变量)及其用法;
  3. 掌握Shell中的特殊字符、算术与逻辑运算;
  4. 掌握Shell中输入输出命令;
  5. 掌握Shell程序控制结构语句。

实验内容:

在VMware中启动CentOS7虚拟机后,打开putty或者MobaXterm,远程登录root账号,完成以下任务,截图并粘贴于以下空行中。

利用vi在宿主目录中编写一个名为test8_1.sh的Shell程序,该程序查看当前目录和日期(脚本代码如下),并用给定的三种方式执行。

#!/bin/bash

echo "The current directory has the following files"

ls

echo "today is"

date

sh<程序名

sh 程序名

用chmod a+x 程序名,使该程序成为可执行文件,然后进入该程序文件所在目录,执行./程序名

说明:在这三种运行Shell程序的方法中,最好按下面的方式选择:当刚创建一个Shell程序,对它的正确性还没有把握时,最好使用第一或第二种方式进行调试。当一个Shell程序已经调试好时,应使用第三种方式把它固定下来,以后只要键入相应的文件名即可,并可被另一个程序所调用。另外,注意这三种运行方法都是创建一个新的Shell子进程来执行脚本内容。

利用vi在宿主目录中编写一个名为test8_2.sh的Shell程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。任选一种方法执行该程序。

#!/bin/bash

echo "Please input the month : "

read month

echo "Please input the year : "

read year

cal      

Shell编程中,单引号和双引号是有区别的:单引号里所有字符或字符串都视为一般字符,而双引号仍然可以保留$、倒引号、反斜线\等特殊功能。比较以下两个命令的结果。

#!/bin/bash

echo "Please input your name?"

read name

echo "Hello, $name ! The number of users in the system is `who |wc -l`."

echo 'Hello, $name ! The number of users in the system is `who |wc -l`.'

利用vi在宿主目录中编写一个名为test8_4.sh的Shell程序,该程序根据用户输入的分数判断成绩是否通过考试。

#法1:使用if语句

#!/bin/bash

echo  $score  "please input a score:\c"

read score

echo "Your score is $score"

if       [ $score -ge 60 ]; then       #变量score的值大于等于60

then echo "Congratulation! You Pass the Examination."

else echo "Sorry! You Fail the Examination!"

 if 

#法2:使用case语句。注意理解由通配符和“|”隔开的多个模式组成的表达式。

#!/bin/bash

echo  $score  "please input a score:\c"

read score

echo "Your score is $score"

case  $scorr   in 

 [0-9]|[1-5][0-9]) echo "Sorry! You Fail the Examination!" ;;  #0-9或者10-59

 [6-9][0-9]|100) echo "Congratulation! You Pass the Examination." ;;  #60-99或者100

 esac 

利用vi在宿主目录中编写一个名为test8_5.sh的Shell程序,该程序模拟一个多任务维护界面,当执行程序先显示菜单,然后进行选择后做相应的维护监控操作。显示菜单使用自定义函数实现。

#!/bin/bash

display()

{

echo " ----- Command Help Menu -----"

echo " h Show command help menu. "

echo " f Show all available block devices. "

echo " d Show the remaining disk space. "

echo " m Show the memory usage. "

echo " u Show how long the system is running. "

echo " q exit the program. "

}

display

while true

do

echo "Please select what you want to do (help h)"

read action

case  $action   in 

h) display;;   

f) lsblk;;

d) df -h;;

m) free -m;;

u) uptime;;

q) exit;;

  esac  

  done  

已知变量a=3,b=2,完成以下算术运算,并截图。

expr方法。注意运算符前后都有空格。

代码:expr $a - $b,用于计算a与b的差。仿此计算:

a与b的乘积。

a除以b的商。

a除以b的余数。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

product=$(expr $a \* $b)

echo "乘积: $product"

# 计算 a 除以 b 的商

quotient=$(expr $a / $b)

echo ": $quotient"

# 计算 a 除以 b 的余数

remainder=$(expr $a % $b)

echo "余数: $remainder"

let方法。运算符前后不需要有空格,需要结合echo命令输出结果。

代码:let c=$a-$b; echo $c,用于计算变量a与b差。仿此计算:

a与b的乘积

a的b次方。符号“**”对两个变量做幂运算。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

let c=$a*$b

echo "乘积: $c"

# 计算 a 的 b 次方

let d=$a**$b

echo "幂: $d"

$((表达式))方法。运算符前后不需要有空格,且表达式中的变量前面不需要加上$符号,需要结合echo命令输出结果。

运行代码:c=$((a-b)); echo $c,用于计算变量a与b差。仿此计算:

a与b的乘积

a的b次方。符号“**”对两个变量做幂运算。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

c=$((a*b))

echo "乘积: $c"

# 计算 a 的 b 次方

d=$((a**b))

echo "幂: $d"

$[表达式]方法。与$((表达式))方法类似。

运行代码::c=$[a-b]; echo $c,用于计算变量a与b差。仿此计算:

a与b的乘积

a的b次方。符号“**”对两个变量做幂运算。

#!/bin/bash

a=3

b=2

# 计算 a 与 b 的乘积

c=$((a*b))

echo "Product: $c"

# 计算 a 的 b 次方

d=$((a**b))

echo "Power: $d"

利用vi在宿主目录中编写一个名为test8_7.sh的Shell程序,该程序实现计算用户输入命令后的若干个数字参数的和。例如运行sh test8_7.sh 1 2 3,结果是1、2、3的和6。

#法一:用for循环

#!/bin/bash

sum=0

for i #这里for i 完整的写法应该是       

do

let           

done

echo sum=    

#法二:用while循环和shift命令(注意理解shift命令的用法。供参考)

#!/bin/bash

sum=0

while [ $# -ne 0 ] #这里的$#表示命令后所有参数$1、$2…的总个数

do

let sum=$sum+$1 #想想这里为什么是$1

shift

done

echo sum=$sum

利用vi在宿主目录中编写一个名为test8_8.sh的Shell程序,该程序把当前目录下的所有*.sh文件到指定的目录(如home目录下某个普通用户的家目录下)中,并显示复制后该目录内按文件大小排序的目录文件清单。

echo "Please enter the destination directory name that you want to copy:"

read dir

if           #文件测试。若变量dir代表的文件存在且是目录文件

then

for filename in       #所有*.sh文件,使用通配符

do

cp $filename      #将所有*.sh文件复制到目标目录

done

ls -l $dir | sort -n -r -k 5 #-n数值排序,-r逆序,-k 5按第5个字段。教材P83

else

echo "$dir is a bad directory name."

fi

思考:

Shell变量两种类型,即Shell环境变量和____局部变量_________。Shell环境变量又分成可写和只读两大类。

在使用用户自定义变量时,要在变量名前面加上符号__$___。

Shell标准输入命令是__<stdin>_____,输出命令是___<stdout>_____。

Shell顺序结构中的操作符有4种:顺序分隔符(;)、__逻辑否(!)_______、逻辑与(&&)和逻辑或(||)。

通过使用Linux/Unix中文件重定向命令,可以将命令的输入、输出以及错误消息重定向到其他文件中,重定向方式有以下几种:输入重定向命令、输出重定向命令、输出附加定向命令和标准错误重定向命令,它们使用的符号分别是什么?

输入重定向命令:<

输出重定向命令:>

输出附加定向命令:>>

标准错误重定向命令:2>

Shell选择分支结构主要有2类:if语句和____case___语句。

Shell循环结构有3类语句:for语句、__while____语句和until语句。

Shell循环结构中的循环体需要放在___do__和___done___两个关键字之间。

Shell脚本中,退出脚本程序命令是____exit____。

  • 30
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值