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

     

      

            

时间: 2024-12-17 20:51:04

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

自学Linux Shell13.1-命令行参数

点击返回 自学Linux命令行与Shell脚本之路 Bash shell提供了一些不同的方法来从用户处获得数据,包括以下3中方法: 命令行参数(添加在名利后面的数据) 命令行选项(可修改命令行为的单个字母) 直接从键盘读取输入的能力 13.1-命令行参数(直接手工处理位置参数) 向shell脚本传递数据的基本方法就是使用命令行参数,能满足多数的简单需求.命令行参数运行在运行脚本时向命令行添加数据. 必须要要知道几个变量,     $0 :即命令本身,相当于C/C++中的argv[0]     $

19.自学Linux之路:bash条件的逻辑运算与bash编程之字符测试

课前复习:求出200以内能被3整除的整除之和 #!/bin/bash declare -i sum=0 for i in {1..200};do if [ $[$i%3] -eq 0 ]; then let sum+=$i fi done echo "The sum is: $sum" bash的知识点: 给条件测试:对条件做逻辑运算 与:条件1 && 条件2 或:条件1 || 条件2 非:!条件 例:#userName=root #id $userName &

12.自学Linux之路:文件处理类命令

文本处理类的命令:wc,word count ctrl+d 提交 行 单词数 字节数 wc [option] [file]... -l:统计行数 -c:统计字节数 -w:统计单词数 tr:转换或删除字符,tr '集合1' '集合2',必须使用管道 转换字符:会把第一个字符集的对应转换为第二个字符集中的对应转换 -d:删除出现过的字符集 例子: #echo  "hello world"  |  tr  'abcdefg'  'ABCDEFG'   (管道) #cat  /etc/issu

22.自学Linux之路:文件系统,分区,格式化

按名称存取是文件系统存在的一个主要目的是一个软件,对磁盘上存在的二进制进行管理为了能在一个磁盘上安装多个系统,引入了分区的概念track:磁道是有厂商划分好的sector:扇区固定角速度的设备任意磁盘上的任意扇区,读取的平均时间称为平均寻道时间柱面:分区:第0个扇区存放的是磁盘的分区信息,MBR:Master Boot Record 主引导记录512byte: bootloader:记载器,446bytes 每16个字节引导一个分区, 2个字节被填充了2个5A,MBR有效性标记4个主分区扩展分区

14.自学Linux之路:位置参数,交互式脚本,给变量以默认值

知识点1:位置参数 位置参数:#/tmp/tesh.sh  3  89 $0:脚本自身 $1:脚本的第一个参数 $2:脚本的第二个参数 .... 例:任意给两个整数,求和,差,积,商 #nano  dd.sh #!/bin/bash # echo $1 echo $2 echo $0 #chmod  +x  dd.sh #./pos.sh  5 9 结果:5 9 dd.sh  #!/bin/bash  #  echo "the sum is :$[$1+$2]."  echo &quo

3.自学Linux之路:shell特性之三:命令历史

命令历史 简介:bash保存了过去曾经执行过的命令列表. 当前shell的命令进程保存在内存中. 退出时,保存到当前用户文件夹中的隐藏文件夹.bash_histroy中,ls -a 可查看 history快捷方式: !#: #为命令历史列表中的命令编号(#history :查看缓存中的命令历史及编号) !!: 执行上一条,等价于方向键上 !-1:执行倒数第一个命令 !string: 执行历史中最近一次以string开头的命令 history -c :清空缓存中的命令历史 history -d #

15.自学Linux之路:文本处理工具grep,eprep和fgrep

文本处理工具grep,eprep和fgrep: grep:(global search regular expression and print out the line),全面搜索正则表达式,并显示相应的行 文本搜索工具:根据用户指定的文本模式对目标文件逐行搜索,显示能够被模式匹配的行 格式:grep  [options]  'PATTERN'  file,.....    文本过滤器 --color=auto:将匹配到的模式加上颜色 例:#grep  --color=auto  Boot  

11.自学Linux之路:用户和权限管理

权限: 对于文件而言: 读:Read (r) r:可用cat,more,less去查看,可以使用内容查看类命令来显示相关内容. 写:write (w) w:可以使用内容编辑器修改其内容. 可执行:execute (x) x:可以将其发起为一个进程,我们将其交给内核,由内核启动为进程 . 对于目录而言: r:可以使用ls命令查看目录内容的文件信息. w:可以创建,删除文件. x:可以使用ls -l命令查看目录内容的文件信息,并可以使用cd命令切换此目录为工作目录. #ls -l: 可查看到10位由

17.自学Linux之路:bash编程之条件判断语句

bash编程之条件判断:判定后续操作的前提条件是否满足 常用判断类型: 整数判断: 字符判断: 文件判断: $?:状态返回值 0:真 1-255:假 我们可以将状态返回值作为判断条件,不需要加` ` 布尔值: 真和假 逻辑运算: 与运算:&& 或运算:|| 非运算:! bash中条件判断使用if: 单分支: if 条件; then 分支1; fi 双分支: if 条件; then 分支1; else 分支2; fi 多分支: if 条件; then 分支1; elif 条件2; then