区分命令行传参数练习和用户输入参数
1、
创建一个名为foo.sh 的脚本,让其提供下列特征
A.当运行/root/foo.sh redhat, 输出为fedora
B.当运行/root/foo.sh fedora,输出为redhat
C.当没有任何参数或者参数不是redhat或者fedora时,提示输出以下的信息:/root/foo.sh redhat|fedora
不用bash 程序名的方式,要求写清楚如何执行的。
touch foo.sh
vi foo.sh
#!/bin/bash
if [ "$1" = redhat ];
then echo 'fedora'
elif [ "$1" = fedora ];
then echo 'redhat'
else echo "/root/foo.sh redhat|fedora"
fi
:wq
chmod 755 foo.sh
./foo.sh redhat
2、写一个脚本文件checkuser,该脚本运行时获得用户输入的用户名,在/etc/passwd文件中查找用户是否存在。提示:cut /etc/passwd -d: -f1
touch checkuser
vi checkuser
#!/bin/bash
echo '输入用户名'
read username
i=`cut /etc/passwd -d: -f1 |grep -c $username`
if [ "$i" = "1" ];
then echo '存在此用户'
else echo '此用户不存在'
fi
3. 编写脚本程序备份用户指定的文件(如何获得用户输入自定),将文件备份到加目录下的backup目录中(若目录不存在则自动建立),备份文件的文件名格式为“文件名_bak_年月日_时分秒”。
touch bak.sh
chmod 777 bak.sh
#!/bin/bash
echo '输入路径'
read filepath
dirs=`ls ~ | grep -c 'backup'`
if [ "$dirs" = "0" ];
then `mkdir backup`
fi
bakpath="/root/backup/"
if [ -f $filepath ];
then
cp $filepath $bakpath`basename $filepath`_bak_`date '+%Y%m%d_%H%M%S'`
else echo "文件不存在"
fi
练习case控制结构
4.编写一个shell脚本程序,它能根据输入的命令行参数采取不同的动作:如果是目录,则列出该目录中的文件;如果是可执行的文件,则用shell执行之;如果是可读的文件,则分屏显示其内容。
touch four.sh
直接用if
#!/bin/bash
file=$1
if [ -d $file ];
then ls $file
elif [ -x $file ];
then sh $file
elif [ -r $file ];
then more $file
else ll $file
fi
第二种case+if
#!/bin/bash
file=$1
n=0
if [ -d $file ];
then n=1
elif [ -x $file ];
then n=2
elif [ -r $file ];
then n=3
else n=4
fi
case $n in
1) ls $file;;
2) sh $file;;
3) more $file;;
4) ll $file;;
esac
练习循环控制结构
5.将用户给定目录下的所有mp3文件名字改名,名字前面加数字序号(增长+1即可)。要求用户给定目录通过read输入语句获得。
提示: $[],$(())
#!/bin/bash
echo '输入目录'
read dirpath
files=`ls $dirpath/*.mp3`
num=1
for m in $files
do
mv "$dirpath/`basename $m`" "$dirpath/${num}`basename $m`"
num=$((num+1))
done
文件目录操作写脚本练习
6.对家目录下的fd目录数据进行备份,要求始终保持保存最近3次的备份。待备份数据存放在/home/user/workdata中,最近三次备份文件分别命名为worknewdata.tar、work2nddata.tar和work3rddata.tar。
#!/bin/bash
num=`ls ${HOME}/workdata | grep -c "work*"`
change()
{
mv ~/workdata/work2nddata.tar ~/workdata/work3rddata.tar
mv ~/workdata/worknewdata.tar ~/workdata/work2nddata.tar
tar -Pczf ~/workdata/worknewdata.tar ~/fd
}
if [ $num -eq 3 ];
then
`rm -f ~/workdata/work3rddata.tar`
change
elif [ $num -eq 2 ];
then change
elif [ $num -eq 1 ];
then
mv ~/workdata/worknewdata.tar ~/workdata/work2nddata.tar
tar -cPzf ~/workdata/worknewdata.tar ~/fd
else tar -cPzf ~/workdata/worknewdata.tar ~/fd
fi