Linux脚本shell命令练习

区分命令行传参数练习和用户输入参数

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

Linux脚本shell命令练习_第1张图片

Linux脚本shell命令练习_第2张图片

  

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

Linux脚本shell命令练习_第3张图片

Linux脚本shell命令练习_第4张图片

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

Linux脚本shell命令练习_第5张图片

Linux脚本shell命令练习_第6张图片

 

练习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    

Linux脚本shell命令练习_第7张图片

Linux脚本shell命令练习_第8张图片

练习循环控制结构

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

Linux脚本shell命令练习_第9张图片

文件目录操作写脚本练习

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

Linux脚本shell命令练习_第10张图片

Linux脚本shell命令练习_第11张图片

你可能感兴趣的:(Linux)