shell脚本练习手册

命令:

rename  修改文件名(适用于批量修改文件名)

与 mv 命令的区别  mv适用于 单个文件修改(单源移动时候才可以改名字)

语法:用法:

 rename [选项] 表达式 替换文件...

 

选项:

 -v, --verbose    解释正在进行的操作

 -s, --symlink    在符号链接上执行

 

 -h, --help     显示此帮助并退出

 -V, --version  输出版本信息并退出

例如:

rename de mo demo?

解读 通配demo? 找到其中的 de  改成mo

命令:

uptime

可以查看系统启动时间

 

代码注释:

                   缩进,适度添加空白行;

                  

         语言:编程语法格式,库,算法和数据结构

 

                  

         变量:

                   局部变量

                   本地变量

                   环境变量

                  

                   位置参数变量

                   特殊变量

                  

         数据类型:字符型、数值型

                   shell 默认:弱类型:字符型

                  

         算术运算:

                   +, -, *, /, %, **(乘方)

                  

                   let  VAR=expression

                   VAR=$[expression]

                   VAR=$((expression))

                   VAR=$(expr argu1 argu2 argu3)

                  

                   注意:有些时候乘法符号需要转义;

                  

                   增强型赋值:

                            变量做某种算术运算后回存至此变量中;

                                     let i=$i+#   变量不用声明 直接使用 引用变量  使用$

                                     let i+=#

                                    

                            +=,-=,*=, /=, %=

                           

                            自增:

                                     VAR=$[$VAR+1]

                                     let  VAR+=1

                                     let  VAR++

                                     let  ++VAR

                                    

                            自减:

                                     VAR=$[$VAR-1]

                                     let  VAR-=1

                                     let  VAR--

                                     let  --VAR

                                    

         条件测试:

                   判断某需求是否满足,需要由测试机制来实现;

                  

                   如何编写测试表达式以实现所需的测试:

                            (1) 执行命令,并利用命令状态返回值来判断;

                                     0:成功

                                     1-255:失败

                            (2) 测试表达式

                                     test  EXPRESSION

                                     [ EXPRESSION ]

                                     [[ EXPRESSION ]]

                                    

                                     注意:EXPRESSION两端必须有空白字符,否则为语法错误;

                                    

                   bash的测试类型:

                            数值测试

                            字符串测试

                            文件测试

                           

                            数值测试:数值比较

                                     -eq:是否等于; [ $num1 -eq $num2 ]

                                     -ne:是否不等于;

                                     -gt:是否大于;

                                     -ge:是否大于等于;

                                     -lt:是否小于;

                                     -le:是否小于等于;

                                    

                            字符串测试:

                                     ==:是否等于;

                                     >:是否大于;

                                     <:是否小于;

                                     !=:是否不等于;

                                     =~:左侧字符串是否能够被右侧的PATTERN所匹配;

                                    

                                     -z "STRING":判断指定的字串是否为空;空则为真,不空则假;

                                     -n "STRING":判断指定的字符串是否不空;不空则真,空则为假;

                                    

                                     注意:

                                               (1) 字符串要加引用;

                                               (2) 要使用[[ ]];

                                              

                            文件测试:

                                     存在性测试

                                               -a  FILE

                                               -e  FILE

                                                        文件的存在性测试,存在则为真,否则则为假;

                                     存在性及类型测试

                                               -b  FILE:是否存在并且为 块设备 文件;

                                               -c  FILE:是否存在并且为 字符设备 文件;

                                               -d  FILE:是否存在并且为 目录文件;

                                               -f  FILE:是否存在并且为 普通文件;

                                               -h  FILE或 -L  FILE:是否存在并且为 符号链接文件;

                                               -p FILE:是否存在且为 命名管道文件;

                                               -S  FILE:是否存在且为 套接字文件;

                                     文件权限测试:

                                               -r  FILE:是否存在并且 对当前用户可读;

                                               -w  FILE:是否存在并且 对当前用户可写;

                                               -x  FILE:是否存在并且 对当前用户可执行;

                                     特殊权限测试:

                                               -u  FILE:是否存在并且 拥有suid权限;

                                               -g  FILE:是否存在并且 拥有sgid权限;

                                               -k  FILE:是否存在并且 拥有sticky权限;

                                     文件是否有内容:

                                               -s  FILE:是否有内容;

                                     时间戳:

                                               -N FILE:文件自从上一次读操作后是否被修改过;

                                     从属关系测试:

                                               -O  FILE:当前用户是否为文件的属主;

                                               -G  FILE:当前用户是否属于文件的属组;

                                     双目测试:

                                               FILE1  -ef  FILE2:FILE1与FILE2是否指向同一个文件系统的相同inode的硬链接;

                                               FILE1  -nt  FILE2:FILE1是否新于FILE2;

                                               FILE1  -ot  FILE2:FILE1是否旧于FILE2;

                            组合测试条件:

                                     逻辑运算:

                                               第一种方式:

                                                        COMMAND1 && COMMAND2

                                                        COMMAND1 || COMMAND2

                                                        ! COMMAND

                                                       

                                                        [ -O FILE ] && [ -r FILE ]

                                                       

                                               第二种方式:

                                                        EXPRESSION1  -a  EXPRESSION2

                                                        EXPRESSION1  -o  EXPRESSION2

                                                        ! EXPRESSION

                                                       

                                                        [ -O FILE -a -x FILE ]

                   脚本的状态返回值:

                            默认是脚本中执行的最后一条件命令的状态返回值;

                            自定义状态退出状态码:

                                     exit  [n]:n为自己指定的状态码;

                                               注意:shell进程遇到exit时,即会终止,因此,整个脚本执行即为结束;

         向脚本传递参数:

                   位置参数变量

                  

                   myscript.sh  argu1 argu2

                            引用方式:

                                     $1,  $2, ..., ${10}, ${11}, ...

                                    

                            轮替:

                                     shift  [n]:位置参数轮替;

         特殊变量:

                   $0:脚本文件路径本身;

                   $#:脚本参数的个数;

                   $*:所有参数(多个字符串) "3" "4" "5"

                   $@:所有参数 (单个字符串)"3 4 5"

 

         过程式编程语言的代码执行顺序:

                   顺序执行:逐条运行;

                   选择执行:

                            代码有一个分支:条件满足时才会执行;

                            两个或以上的分支:只会执行其中一个满足条件的分支;

                   循环执行:

                            代码片断(循环体)要执行0、1或多个来回;

                           

                   选择执行:

                            单分支的if语句:

                                     if  测试条件

                                     then

                                               代码分支

                                     fi

                                     if  测试条件; then

                                               代码分支

                                     fi

                           

                            双分支的if语句:

                                     if  测试条件; then

                                               条件为真时执行的分支

                                     else

                                               条件为假时执行的分支

                                     fi

                                    

                   示例:通过参数传递一个用户名给脚本,此用户不存时,则添加之;

                            #!/bin/bash

                            #

                            if ! grep "^$1\>" /etc/passwd &> /dev/null; then

                                     useradd $1

                                     echo $1 | passwd --stdin $1 &> /dev/null

                                     echo "Add user $1 finished."

                            fi      

                           

                            #!/bin/bash

                            #

                            if [ $# -lt 1 ]; then

                                     echo "只能添加一个用户"

                                     exit 2

                            fi

 

                            if ! grep "^$1\>" /etc/passwd &> /dev/null; then

                                     useradd $1

                                     echo $1 | passwd --stdin $1 &> /dev/null

                                     echo "Add user $1 finished."

                            fi               

                                    

                            #!/bin/bash

                            #

                            if [ $# -lt 1 ]; then

                                     echo "At least one username."

                                     exit 2

                            fi

 

                            if grep "^$1\>" /etc/passwd &> /dev/null; then

                                     echo "User $1 exists."

                            else

                                     useradd $1

                                     echo $1 | passwd --stdin $1 &> /dev/null

                                     echo "Add user $1 finished."

                            fi                         

                           

                 

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值