1.编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件拷贝到第一个位置参数指定的目录中。
#!/bin/bash
dir=$1
shift #将位置参数移动一位(即原先的第二个位置参数现在变成了第一个位置参数,依次类推)
while [ $1 ]
do
file=$1
cp $file $dir
shift
done
ls $dir
运行方式:运行该脚本前,先新建一个目录用来存放需要拷贝的文件,例如:cpdemo就是新建的目录,后面的“.sh”文件就是要拷贝的文件。
#执行脚本
sh cpmulu.sh cpdemo cai.sh qiuhe.sh read.sh test1.sh zifuchuan.sh
#运行结果
cai.sh qiuhe.sh read.sh test1.sh zifuchuan.sh
[tania@localhost demo]$ cd cpdemo/
[tania@localhost cpdemo]$ ls
cai.sh qiuhe.sh read.sh test1.sh zifuchuan.sh
上面的脚本中,如果对shift使用不熟悉的可以看下面这个脚本实例。
#!/bin/bash
while [ $# -ne 0 ]
do
echo "第一个参数为:$1 ,参数个为: $# "
shift
done
执行结果为:
[tania@localhost demo]$ sh shift.sh a b c d e f
第一个参数为:a ,参数个为: 6
第一个参数为:b ,参数个为: 5
第一个参数为:c ,参数个为: 4
第一个参数为:d ,参数个为: 3
第一个参数为:e ,参数个为: 2
第一个参数为:f ,参数个为: 1
2.编写一个shell脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中工作,就发一个问候给用户。
#!/bin/bash
echo "当天日期: `date` "
username=$1
if who |grep "$username"
then
echo "$username 正在系统中工作"
echo "准备发一个问候给$username 吧"
write $username
else
echo "$username 没有在系统中工作"
fi
3.打印给定目录下的某些文件,由第一个参数指出文件所在的目录,其余参数是要打印的文件名。
#!/bin/bash
dir=$1
cd $dir
shift
for i in $@
do
cat $i
done
4.利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。
#!/bin/bash
read -p "请输入拷贝目标目录的位置:" dir
for i in `ls | grep -E "*\.c"`
do
mv $i $dir
done
ls $dir
5.编写一个脚本,求斐波那契数列的前10项及其总和。
#!/bin/bash
a=1
b=1
c=0
i=3
sum=0
echo $a
echo $b
while [ $i -le 10 ]
do
let c=$a+$b
a=$b
b=$c
let i++
#echo "$a、$b、$c"
echo $c
let sum=$sum+$c
done
echo "该数列的前10项的总和为:`expr $sum + 2 `"
6.编写一个脚本,求前10个自然数之和
#!/bin/bash
sum=0
for i in {0..9}
do
let sum=$sum+$i
done
echo $sum