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
        

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐