Shell脚本

一、Shell

  1. 注释,解释器
    Shell 脚本中用#表示注释,相当于 C 语言的//注释。但如果#位于第一行开头,并且是#!(称为 Shebang)则例外,它表示该脚本使用后面指定的解释器/bin/sh 解释执行。如果把这个脚本文件加上可执行权限然后执行。

  2. 运行脚本
    . 脚本名
    ./脚本名
    source 脚本名
    /bin/bash 脚本名

  3. shell语法
    a.数据类型
       字符串String (只有这一种)
    b.变量
     变量建议大写
     本地变量----(局部变量) 默认为本地变量
     环境变量----(全局变量)
     注意等号两边都不能有空格,否则会被 Shell 解释成命令和命令行参数。
     声明变量:itcast$ VAR=10(本地变量 VAR 的值是字符串10 而非整数)
     itcast$ export VAR(将本地变量转换为全局变量)
     itcast$ env | grep VAR
     得到SVAR=10
     env:查询环境变量
     删除变量:itcast$ unset VAR
    c.函数
    d.面向对象(shell不支持)
       继承、重载、封装、多态…
    e.框架

    3.1 test条件测试
    命令 test 或 [ 可以测试一个条件是否成立,真:0 假:1
    Test 测试条件
    [空格 测试条件
    itcast$ VAR=10
    itcast$ test $var -gt 100或[ v a r − g t 100 只 执 行 , 但 不 会 返 回 结 果 ) i t c a s t var -gt 100只执行,但不会返回结果) itcast vargt100itcast echo $?(查看上一个命令执行的结果)

    整数判别符:(只能用在整数之间)
    -eq(等于)
    -ne(不等于)
    -gt(大于)
    -lt(小于)
    -ge(大于等于)
    -le(小于等于)

    文件类型判别符:
    -d 目录文件
    -f 普通文件
    -p 管道
    -l 软连接
    -c 字符设备
    -b 块设备
    -s socket

    字符串长度判断:
    [ -z STRING ] 如果 STRING 的长度为零则为真
    [ -n STRING ] 如果 STRING 的长度非零则为真

    逻辑运算:与、或、非
    -a ---- &&逻辑与,
    -o ---- ||逻辑或,
    ! 逻辑非

    3.2 if分支
    if/then/elif/else/fi
    If [ 判断条件 ];then
    执行内容
    elif [ 判断条件 ];then
    执行内容
    else
    执行内容
    fi

    其中
    if :; then echo “always true”; fi
    “:”是一个特殊的命令,称为空命令,该命令不做任何事,但 Exit Status 总是真。

    3.3 case/esac
    每个匹配分支可以有若干条命令,末尾必须以;; 结束
    echo “Is it morning? Please answer yes or no.”
    read YES_OR_NO
    case “$YES_OR_NO” in
    yes|y|Yes|YES)
    echo “Good Morning!”;;
    [nN][Oo
    echo “Good Afternoon!”;;
    *)
    echo "Sorry, $YESORNO not recognized. Enter yes or no
    return 1;;
    esac

    3.4. for/do/done循环
    它类似于某些编程语言的 foreach 循环。
    for FRUIT in apple banana pear; do
    echo "I like $FRUI
    done

    3.5 while/do/done
    COUNTER=1
    read passwd
    while [ p a s s w d ! = " i t c a s e " − a " passwd != "itcase" -a " passwd!="itcase"a"COUNTER" -lt 4 ]; do
    echo “Here we go again”
    COUNTER=$[COUNTER+1]
    read passwd
    done

  4. 通配符
    *匹配 0 个或多个任意字符
    ? 匹配一个任意
    [若干字符] 匹配方括号中任意一个字符的一次
    例:
    ls *.sh
    ls ???.sh
    ls [a-z][0-9][0-9].sh (查找t34.sh)

  5. 命令代换
    由“`”反引号括起来的也是一条命令,Shell 先执行该命令,然后将输出结果立刻代换到当前命令行中。 例如:

    DATE=date
    echo $DATE

    命令代换也可以用$()表示:
    $ DATE=$(date)

    VAR =$(date)
    Echo $VAR

  6. 算术代换
    对变量执行算数运算:$((变量名))或 [ 变 量 名 ) ] i t c a s t [变量名)] itcast [)]itcast VAR=45
    itcast$ echo ( ( (( ((VAR+3)) 等价于 $((var+3)) 或 echo $[VAR+3]或 [ [ [VAR+3]
    $[base#n],其中 base 表示进制,n 按照 base 进制解释,后面再有运算数,按十进制解释。
    例 echo $[2#10+3]----5
    echo $[8#10+3]----11
    echo $[16#10+3]----19

  7. 转义字符
    a. \

    b. –
    因为各种 UNIX 命令都把-号开头的命令行参数当作命令的选项,而不会当作文件名。
    创建为-hello的文件:
    itcast$ touch – -hello
    itcast$ touch ./-hello
    删除为-hello的文件:
    rm – -hello
    c.续行符
    在\后敲回车表示

  8. 单引号
    括字符串

  9. 双引号
    括字符串 可防止通配符扩展,但允许变量扩展。建议在测试变量取值时都加“”。
    itcast$ VAR=200
    itcast$ echo V A R 200 i t c a s t VAR 200 itcast VAR200itcast echo ‘$VAR’
    V A R i t c a s t VAR itcast VARitcast echo “$VAR”
    200

  10. 位置参数
    $0 相当于 C 语言 main 函数的 argv[0]
    $1、$2… 这些称为位置参数(Positional Parameter),相当于 C 语言 main 函数的 argv[1]、argv[2]…
    $# 相当于 C 语言 main 函数的 argc - 1,注意这里的#后面不表示注释
    $@ 表示参数列表"$1" “$2” …,例如可以用在 for 循环中的 in 后面。
    $* 表示参数列表"$1" “$2” …,同上
    $? 上一条命令的 Exit Status
    $$ 当前进程号
    Shift 左移命令参数

  11. 输入输出echo
    显示文本行或变量,或者把字符串输入到文件。
    echo [option] string
    -e 解析转义字符
    -n 不回车换行。默认情况 echo 回显的内容后面跟一个回车换行
    echo “hello\n\n”
    echo -e “hello\n\n”
    echo “hello”
    echo -n “hello”

  12. tee
    tee 命令把结果输出到标准输出,另一个副本输出到相应文件。
    tee -a a.txt 表示追加操做
    df -k | awk ‘{print $1}’ | grep -v “文件系统” | tee -a a.txt

  13. 函数
    foo(){ echo “Function foo is called”;}
    echo “-=start=-”
    foo
    echo “-=end=-”
    注意函数体的左花括号 { 和后面的命令之间必须有空格或换行。如果将最后一条命令和右花括号 } 写在同一
    行,命令末尾必须有分号;。

  14. 脚本调试方法
    n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。
    -v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
    -x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。

  15. 正则表达式
    1.字符类
    2.数量限定符
    3.位置限定符

  16. Sed
    sed 命令行的基本格式为:
    sed option ‘script’ file1 file2 … sed 参数 ‘脚本(/pattern/action)’ 待处理文件
    sed option -f scriptfile file1 file2 … sed 参数 –f ‘脚本文件’ 待处理文件
    如:
    sed “s/the/this/” testfile 将源文件内容每行第一个the替换为this。(输出到标准输出缓冲区中,输出后看到的内容是改变后的,但原文件本身内容并没有被修改。)(将当前文件读出来放缓冲区中,然后在缓冲区中做替换操作)
    sed -i “s/the/this/g” testfile 将源文件内容中全部the替换为this (g),原文件本身内容也将会被修改(-i)。
    sed “s/the/this/g” testfile | tee t111 把结果输出到标准输出,同时生成一个副本t111。
    sed -i “2a itcast” testfile 在输出 testfile 内容的第二行后添加"itcast"。
    sed -i “3d” testfile 删除第三行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值