标签:ann file else 当前目录 循环 匹配 多少 脚本 是什么
4.8 分析下列shell脚本的功能:
count=$#
cmd=echo
while[ $count –gt 0 ]
do
cmd=”$cmd \$$count”
((count=count-1))
done
eval $cmd
答:该脚本的功能是:逆向输出用户在命令行上提供的各个参数。例如,设该脚本名是ABC,执行该脚本的命令行是:$ ABC apple big cat dog
则结果输出是:dog cat big apple
4.9 编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。
答:上机实践题。参考脚本如下:
#!/bin/bash
count=$#
if [ -d “$1” ]
then
n=2
dir=$1
while [ $n –le $count ]
do
if [ -f $2 ]
then cp $2 $dir
else echo “$2 is not an ordinary file.”
fi
shift
((n=n+1))
done
else echo “$1 is not a directory.”
fi
4.10 编写一个shell脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中,就发一个问候给他。
答:上机实践题。参考脚本如下:
#!/bin/bash
date
echo “Input a user name for searching”
read name
if who|grep “$name”
then
echo “Lucky, there is $name in my system now.”
echo “Hi,how are you!” > /var/spool/mail/$name
else echo “Unlucky, there is not $name in my system.”
fi
4.11 打印给定目录下的某些文件,由第一个参数指出文件所在的目录,其余参数是要打印的文件名。
答:上机实践题。参考脚本如下:
#!/bin/bash
count=$#
if [ -d “$1” ]
then
cd $1
n=2
while[ $n –le $count ]
do
if [ -f $2 ]
then cat $2
else echo “Sorry, cannot display $2.”
fi
shift
((n=n+1))
done
else echo “$1 is not a directory.”
fi
4.12 利用for循环将当前目录下的 .c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。
答:上机实践题。参考脚本如下:
#!/bin/bash
echo “Input the name of a directory.”
read dir
if [ -d $dir ]
then
for name in *.c
do
mv $name dir
done
ls -S dir
ls dir
else echo “Sorry!$dir is not a directory.”
fi
4.13 利用数组形式存放10个城市的名字,然后利用for循环把它们打印出来。
答:上机实践题。参考脚本如下:
#!/bin/bash
city=( Beijing Shanghai Tianjin Guangzhou Chongqing Hangzhou Nanjing Shenyang Taiyuan Jinan)
for i in ${city[*]}
do
echo $i
done
4.14 编写一个shell脚本,求费波纳奇数列的前10项及总和。
答:上机实践题。参考脚本如下:
#!/bin/bash
fib[1]=1
fib[2]=1
n=3
((sum= fib[1]+fib[2]))
while [ $n –lt 10 ]
do
((fib[n]=fib[n-1]+fib[n-2]))
((fib[n+1]=fib[n-1]+fib[n]))
((sum=sum+fib[n]+fib[n+1]))
((n=n+2))
done
for ((i=1;i<=10;i++))
do
echo ${fib[i]}
done
echo $sum
4.15 下述表达式的作用是什么?
${ name[*] } ${ name[@] } ${ name #*/ }
${ name %%.* } ${ #name[*] } ${ name:-Hello }
答:${name[*]}和${name[@]} 都表示数组name中所有非空元素的值,每个元素的值用空格分开。
${ name #*/ } 如果name值的开头包含模式*/,那么该表达式的值就是name中去掉最少匹配*/部分后的结果;否则,就是name的值。
${ name %%.* } 如果name值的末尾包含.*,那么该表达式的值就是name中去掉最多匹配.*部分后的结果;否则,就是name的值。
${#nane[*]}的值是数组name中已经设置的元素的个数。
${ name:-Hello } 如果name的值为空,则整个表达式的值等于给定的字符串Hello,name保持不变;否则,整个表达式的值等于name的值,name保持不变。
4.16 显示前面所执行的40个命令的清单,重新执行倒数第5条命令。编辑其中一条命令,然后执行。
答:上机实践题。
$ history 40
$ !-5
然后,按↑键或↓键,找到你要编辑的命令;
进行编辑;
按Enter键,执行该命令。
4.17 定义一个别名命令,它等价的功能是:显示当前日期及工作目录,并列出有多少用户在系统上工作。
答:上机实践题。
$ alias cmd=’date;pwd;who|wc –l’
$ cmd
4.18 设计一个程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:
$ cuts 11 14
this is a test of cuts program (输入)
test (显示结果)
答:上机实践题。参考脚本如下:
#!/bin/bash
read -p "Input a string: " str
echo $str | cut -c $1-$2
标签:ann file else 当前目录 循环 匹配 多少 脚本 是什么
原文地址:https://www.cnblogs.com/SxSeQzS/p/10162671.html