首页 > 代码库 > 21.自学Linux之路:文件测试,参数轮替

21.自学Linux之路:文件测试,参数轮替

bash知识点之文件测试:

  知识回顾:

      字符测试:

          格式:test 表达式

            :[ 表达式 ]

            :[[ 表达式 ]]

      整数测试:

          格式:test 表达式

            :[ 表达式 ]

            :[[ 表达式 ]]

      文件测试:

          单目测试:

              -e /path/to/file:测试文件是否存在

              -a /path/to/file:测试文件是否存在

 

              -f /path/to/file:判断文件是否为普通文件

              -d /path/to/file:判断文件是否为目录文件

              -b /path/to/file:判断文件是否为块设备文件

              -c /path/to/file:判断文件是否为字符设备文件

              -h或-L /path/to/file:判断文件是否为符号链接文件

              -p /path/to/file:判断文件是否为管道文件

              -S /path/to/file:判断文件是否存在且为套接字文件

 

              -r /path/to/file:判断当前文件是否存在且当前用户对该文件是否具有可读权限

              -w /path/to/file:判断当前文件是否存在且当前用户对该文件是否具有写权限

              -x /path/to/file:判断当前文件是否存在且当前用户对该文件是否具有执行权限

 

              -s /path/to/file:判断当前文件是否存在且其内容是否为空

          双目测试:

              file1 -nt file2:文件1是否比文件2更新(修改时间),若文件1存在,文件2不存在,也认为file1更新

              file1 -ot file2:文件1是否比文件2更旧

              file1 -ef file2:文件1和文件2是否引用了相同的设备文件

 

例1:若/tmp/hello.r不存在则创建该文件

#!/bin/bash

fileName=/tmp/hello.r

[ -e $fileName ]||mkdir $fileName

 

例2:若当前文件对该配置文件有读权限,我们就将其载入

在脚本中,载入另一个文件中的配置的方法

方法1:source /path/to/somefile或者. /path/to/somefile

配置文件内容如下:/tmp/script/myscript.conf

userName=Tom

fileName=/etc/passwd

 

#!/bin/bash

#configFile=/tmp/script/myscript.conf

[ -r /tmp/script/myscript.conf] && ./tmp/script/myscript.conf

userName=$[userName:-testuser]

echo $userName

 

例3:用本地文件下载工具wget在脚本中下载文件

#!/bin/bash

url=‘http://172.16.0.1/centos6.5repo‘

which wget &> /dev/null || exit 5

downloader=`which wget`

[ -x $downloader ] || exit 6

$downloader $url

 

例4:写一个脚本完成以下任务

1.分别辅助/var/logs下的文件到/tmp/logs目录中

2.复制目录时,才使用cp -r

3.复制文件时,使用cp

4.复制链接文件cp -d

5.余下的使用cp -a

#!/bin/bash

#

targetDir=‘/tmp/logs‘

[ -e $targetDir ] || mkdir $targetDir

for fileName in /var/log/*; do

  if [ -d $fileName ]; then

    copyCommand=‘cp -r‘

  elif [ -f $flieName ]; then

    copyCommand=‘cp‘

  elif [ -h $fileName ];then

    copyCommand=‘cp -d‘

  else

    copyCommand=‘cp -a‘

  fi

  $copyCommand $fileName $targetDir

done

 

bash知识点之:位置参数轮替(shift)

写一个脚本,要求脚本后附带参数,脚本功能为求参数的和。

#!/bin/bash

#

declare -i sum=0

for i in `seq 1 $#`; do

  let sum+=$i

  shift

done

echo $sum

 

写一个脚本:使用形式如下

  userinfo.sh -U username [-V {1|2}]

-U选项用于指定用户;而后脚本显示用户的UID和GID

如果同时使用了-V选项

  -V后面的值是1,则额外显示用户的家目录路径

  -V后面的值是2,则额外显示用户的家目录路径和shell

#!/bin/bash

#

[ $# -lt 2 ] && echo "Too less argements, quit" && exit 3

if [[ "$1" == "-U" ]];then

  userName="$2"

  shift 2

fi

if [ $# -ge 2] && [ "$1" == "-V" ];then

  verFlag=$2

fi

if [ -n $verFlag ];then

  if ! [[ $verFlag =~ [012] ]];then

    echo "Wrong parameter"

    echo "Usage:`basename $0` -u UserName -v {1|2}"

    exit 4

  fi

fi

#echo $userName $verFlag

if [ $verFlag -eq 1 ];then

  grep "^$userName" /etc/passwd | cut -d: -f1,3,4,6

elif [ $verFlag -eq 2 ];then

  grep "^$userName" /etc/passwd | cut -d: -f1,3,4,6,7

else

  grep "^$userName" /etc/passwd | cut -d: -f1,3,4

fi 

 

 

 

     

      

            

21.自学Linux之路:文件测试,参数轮替