zoukankan      html  css  js  c++  java
  • Shell脚本编程基础笔记一

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html

    一:脚本文件的创建、格式、运行

    1:创建shell脚本

    首先,要创建一个文件

    touch 文件名

    然后,编辑该文件,将命令输入其中。

    脚本文件第一行,需要指明使用的shell种类:

    #! shell的路径
    比如:
    #!/bin/bash

    脚本的注释符号是井号 #。

    #注释

    一般脚本格式为:

    #!/bin/bash
    #脚本注释:介绍脚本的用途
    命令行、代码

    2:改变文件权限

    默认创建的文件没有执行权限,需要收到赋予。

    chmod u+x 文件名

    3:执行文件

    对于经常执行的文件,需要将shell脚本所处目录添加到PATH环境变量去,这样,每次只需输入脚本名即可运行。

    对于一次性使用的,则通过路径来启动:

    ./脚本名  :运行当前目录下的脚本文件
    /.../.../脚本名  :通过绝对路径运行某个脚本文件

    二:基本操作

    1:打印输出

    echo 内容
    例如:
    echo "字符串"
    echo $变量名
    
    将命令行结果输出到字符串后面:
    echo -n "字符串: "
    command

    2:使用环境变量

    可以通过 set 命令查看系统中的环境变量。

    在脚本中,可以通过  $环境变量名 来引用。

    3:使用用户变量

    shell编程的变量不需要声明后使用,直接赋值就是声明。

    引用变量可以  $变量名 或者  ${变量名}  来引用。

    var=value  :赋值的同时即声明
    $var ${var}  :引用变量
    var2 = $var1 :变量之间的赋值:后者必须用 $ ,否则相当于字符串赋值给var2

    4:提取命令输出

    将命令的输出赋值给变量,有两种方法:

    反引号法:

    var=`command` :用反引号括住命令,那么命令的执行就自动提取给变量

    美元括号法:

    var=$(command)  :用括号将命令括住,命令的运行结果被提取赋值给变量

    5:重定向输入输出

    输出重定向:

    command > 文件:将输出写入文件(覆盖)
    command >> 文件 :将输出追加到文件

    输入重定向:

    command < 文件 

    6:管道

    将一个命令的输出作为另一个命令的输入。

    command1 | command2 

    [一般,最常用的场景是:将命令行产生的大量输出,通过管道传送给more显示]

    7:进行数学运算

     法一(不推荐):expr

    expr 运算表达式

    法二:方括号法

    $[运算表达式]

    注意:bash中是数学运算针对整数,如果涉及浮点数,一般需要借助外在程序。

    8:退出脚本

    exit [退出码]

    查看退出码:

    $?  :保存了最近一个脚本的退出码

    三:结构化命令——基本语句

    1:条件语句

    if [condition]
    then
        commands
    elif [condition]
    then

    commands
    else
    commands fi 或者
    if [condition]; then commands fi

     判断条件主要包括:非空判断、数值比较、字符串比较、文件比较等。

    非空判断:

    if [$变量]  :变量是否为空

    数值比较:(注意:如果用符号来比较,需要转义!)

        -eq (equal)           等于,如:if [ "$a" -eq "$b" ]
        -ne (not equal)       不等于,如:if [ "$a" -ne "$b" ]
        -gt (greater than)    大于,如:if [ "$a" -gt "$b" ]
        -ge (greater equal)   大于等于,如:if [ "$a" -ge "$b" ]
        -lt (less than)       小于,如:if [ "$a" -lt "$b" ]
        -le (less equal)      小于等于,如:if [ "$a" -le "$b" ]
        <                     小于(需要双括号),如:(("$a" < "$b"))
        <=                    小于等于(需要双括号),如:(("$a" <= "$b"))
        >                     大于(需要双括号),如:(("$a" > "$b"))
        >=                    大于等于(需要双括号),如:(("$a" >= "$b"))

    字符串比较:(注意:如果用符号来比较,需要转义!)

    =       等于,如:if [ "$a" = "$b" ]
        ==     等于,如:if [ "$a" == "$b" ], 与=等价
                   注意:==的功能在[[]]和[]中的行为是不同的,如下:
                   1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true
                   2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
                   3
                   4 [ $a == z* ]      # File globbing 和word splitting将会发生
                   5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
    
        !=      不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
        <       小于,在ASCII字母顺序下.如:
                   if [[ "$a" < "$b" ]]
                   if [ "$a" < "$b" ]     在[]结构中"<"需要被转义.
        >       大于,在ASCII字母顺序下.如:
               if [[ "$a" > "$b" ]]
               if [ "$a" > "$b" ]  在[]结构中">"需要被转义.
        -z       字符串为"null".就是长度为0.
        -n       字符串不为"null"

    文件比较:

    -d file:检查file是否一个目录
    -e file:检查file是否存在
    -f file:检查file是否是一个文件
    -r file:检查file是否存在且可读
    -s file:检查file是否非空
    -w file:检查file是否可写
    -x file:检查file是否可执行
    -O file:检查file是否属于当前用户
    -G file:检查file存在的默认组是否与当前用户相同
    file1 -nt file2:file1是否比file2新
    file1 -ot file2:file1是否比file2旧

    条件复合:

    与: [ condition ] && [ condition ]
    或: [ condition ] || [ condition ]

    高级特性

    双括号:在双括号内进行更复杂的数学运算

    if ((高级运算))
    
    高级运算主要有:
    ++
    --~
    **
    >>
    <<
    &
    |
    &&
    ||

    双方括号:进行高级字符串比较运算

    if [[高级字符串运算]]
    
    高级字符串运算主要是指:模式匹配
    例如:
    if [[$var == r*]]

    case语句:

    case $变量 in
    pattern1)  commands;;  #注意,两个分号!
    pattern2 | pattern3)
        commands;;
    *)                                #其他情况
        commands;;

    2:循环语句

    for-in语句:

    for var in list
    do
        commands
    done

    列表中的符号、空格怎么处理:转义  或者  用双引号将符号与单词合并

    list:可以是变量($变量)、可以是命令的输出( $(command) )、可以是某目录下的通配符( for file in /../../*)

    for循环语句:

    for ((i = 起始值;i < 临界值; i++))
    do
        command
    done

    while语句:

    while [ condition ]
    do
        command
    done

    until语句:

    until [ condition ]
    do
        command
    done 

    跳出循环:

    break:跳出当前循环

    break n:跳出第n层循环,当前循环为1,往外数递增。

    continue:终止当前次循环,开启下一次循环

    重定向循环的输出:

    各种循环语句
    ......
    ......
    done > 输出文件
  • 相关阅读:
    爬虫框架概述
    Django【进阶篇 】
    Django【基础篇】
    【tornado】系列项目(二)基于领域驱动模型的区域后台管理+前端easyui实现
    刷题记录:[安洵杯 2019]easy_serialize_php
    刷题记录:[SWPU2019]Web1
    2019-2020-1 20175210 20175211 20175219 实验五 通讯协议设计
    2019-2020-1 20175210 20175211 20175219 实验三 实时系统
    2019-2020-1 20175210 20175211 20175219 实验四 外设驱动程序设计
    2019-2020-1 20175210 20175211 20175219 实验二 固件程序设计
  • 原文地址:https://www.cnblogs.com/ygj0930/p/8176137.html
Copyright © 2011-2022 走看看