实验三 Vi及Shell程序设计
【实验目的】
1、 掌握vi的操作方法。
2、 掌握Shell脚本的编程方法。
【实验内容】
第一部分 vi
1、请在/tmp目录下建立一个名为vitest的目录;(请书写命令
[root@wwq-VirtualBox:~]# mkdir /tmp/vitest
2、进入vitest目录;
[root@wwq-VirtualBox:~]#cd /tmp/vitest
3、/fig复制到本目录下;
[root@wwq-VirtualBox:~]#cp /fig .
注意:Ubuntu中没有fig文件
4、使用vi开启本目录下的fig文件;
[root@wwq-VirtualBox:~]#fig
5、vi中设定行号;
:set number
6、移动到第58行,向右移动40个字符,请问看到什么目录?
/dir/bin/foo
7、移到第1行,并向下搜寻bzip2字符串,请问它在第几行?
第118
8、50100行之间的man改为MAN,如何实现?
:50,100s/man/MAN/gc
9、修改完后,想全部复原,怎么样实现?
:q!或者按u撤销
10、复制6573行这9行的内容,并粘贴到最后一行之后;
按“65G”使光标移到65行,再按“9yy”,再按“G”到最后一行,再按“P”就可以完成操作。
11、删除2142行之间的开头为#符号的批注数据,如何实现?
按“21G”之后,再按“22dd”即可删除22行。
12、将这个文件另存为fig文件;
:st.config
13、转到第27行,并删除15个字符,结果出现的第一个单词是什么?
shell最简单脚本
删除:按“27G”,再按“15x”即可删除15个字符
出现“you”单词
14、在第一行新增一行,输入I am a student,怎样实现?
按“1G”到第一行,再按“O”新增一行并进入插入模式,输入文字后按Esc回到一般模式。
15、保存后退出。
:wq
第二部分 Shell程序设计
1、请编写一个Shell脚本,当执行该脚本的时候,该脚本可以显示:1)你目前的身份(用USER)2)你目前所在的目录(用PWD)
#!/bin/bash
echo "name is $(whoami)"
echo "current directory is $(pwd)"
name is root
current directory is /root
2、请编写一个Shell脚本,该程序可以计算“你还有多少天可以过生日”。
#!/bin/bash
read -p "input birthday(MMDD):" bir
now=`date +%m%d`
if [ "$bir" = "$now" ];then
    echo "Happy Birthday!"
elif [ "$bir" -gt "$now" ];then
    year=`date +%Y`
    total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
    echo "Your birthday will be $total_d later."
else
    year=$((`date +%Y`+1))
    total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
    echo "Your birthday will be $total_d later."
fi
input birthday(MMDD):0916
Your birthday will be 127 later.
3、让用户输入一个数字,程序可以由1+一直累加到用户输入的数字为止。
#!/bin/bash
read -p "input an integer number:" number
i=0
s=0
while [ "$i" != "$number" ]
do
i=$(($i+1))
s=$(($s+$i))
done
echo "the sum of 1-$number is $s"
input an integer number:3
the sum of 1-3 is 6
4、请编写一个Shell脚本,它的作用是:1)先查看一下/root/test/logical这个名称是否存在;2)若不存在,则建立一个文件,使用touch来建立,建立完成后离开;3)如果存在的话,判断该名称是否为文件,若为文件则将它删除后建立一个目录,目录名为logical,之后离开;4)如果存在的话,判断该名称是否为目录,若为目录则删除此目录。
#!/bin/bash
if [ ! -e logical ]; then
touch logical
echo "make a file logical"
exit 1
elif [ -e logical ] && [ -f logical ]; then
rm logical
mkdir logical
echo "remove file logical"
echo "make directory logical"
exit 1
elif [ -e logical ] && [ -d logical ]; then
rm -rf logical
echo "remove directory logical"
exit 1
else
echo "do nothing."
fi
make a file logical
remove file logical
make directory logical
remove directory logical
make a file logical
5、我们知道/etc/passwd里面以:来分隔,第一栏为账号名称。请编写一个Shell脚本,可以将/etc/passwd的第一栏取出,而且每一栏都以一行字符串The 1 account is root来显示,那个1表示行数。
#!/bin/bash
accounts=`cat /etc/passwd | cut -d':' -f1`
for account in $accounts
do
declare -i i=$i+1
echo "$i account is \"$account\""
done
1 account is "root"
2 account is "daemon"
3 account is "bin"
...
6、请编写一个Shell脚本,利用for循环把当前目录下的所有*.c文件复制到指定的目录中,并显示复制后该目录内按文件大小排序的目录文件清单。
#!/bin/bash
cd $1
for x in $1/*.c
do
cp $x $2
done
ls -S $2
[root@wwq-VirtualBox:~]# sh copy.sh . test
a.c
7、请编写一个Shell脚本,它把第二个位置参数及其以后的各个位置参数指定的文件复制到第一个位置参数执行的目录中。
#!/bin/bash
a=$1
shift
cp $* $a
[root@wwq-VirtualBox:~]# sh shift.sh test copy.sh remove.sh birth.sh
a.c copy.sh remove.sh birth.sh
8、请编写一个Shell脚本,根据键盘可以循环输入学生成绩(百分制),并显示对应的成绩标准(及格和不及格),按Q键退出,按其他键提示重新输入。
#!/bin/bash
while
read -p "input number:" var
do
case $var in
Q) exit;;
q) exit;;
esac
echo "number is $var"
if [ "$var" -ge 60 ]
then echo "score is passed."
else echo "score failed to pass."
fi
done
input number:60
number is 60
score is passed.
input number:50
number is 50
score failed to pass.
input number:100
number is 100
score is passed.
input number:q
请完成上述任务,并提交实验报告。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。