zoukankan      html  css  js  c++  java
  • linux--shell script

    下面是最近学习shell script的一些知识点总结

    ***博客园-邦邦酱好***

     

    1.介绍
    shell是一个文字接口,让我们与系统沟通。shell script就是针对shell所写的脚本。
    它就像是早期dos年代的批处理文件.bat,所以shell script可以看成是一个程序也可以是一个批处理脚本,它利用shell与相关工具指令,不需要编译即可执行,可以帮助系统管理员快速的管理好主机。

    shell script用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了,因为Shell scripts的速度较慢,且使用的CPU资源较多,造成主机资源的分配不良

    2.简单的语法
    test.sh
    #!/bin/bash      #宣告这个文档内的语法使用bash的语法,程序被执行时,加载bash的相关配置文件
    #  以#开头的是批注
    #  接着说明script的:1.内容与功能 2.版本信息 3.作者与联系方式 4.建档日期 5.历史记录 等等
    echo -e "Hello World! a "
    exit 0  #中断程序,并回传一个数值给系统

    3.对谈式脚本:变量内容由用户决定
    #!/bin/bash
    read -p "Please enter your firstname:" firstname
    read -p "Please enter your lastname:" lastname
    echo -e " Your full name is:$firstname $lastname"

    4.脚本执行方式
    (1)利用sh/bash来执行脚本:在子程序中执行
    -->当子程序完成后,在子程序内的各项变量或动作将会结束而不会传回到父程序中
    (2)利用source/.来执行脚本:在父程序中执行
    -->脚本在父程序中执行,各项变量或动作仍然留在父程序中
    查看文件权限:ls -l test.sh
    如果不够权限,可以这样赋予执行的权限:chmod a+x test.sh
    (要取得root账户:su root)

    5.利用test命令的测试功能
    (1)文件类型的判断
    test [-efd] file
    -e:该档名是否存在
    -f:该档名是否存在且为file类型
    -d:该文件名是否存在且为diretory类型

    (2)文档权限的判断
    test [-rwx] file
    -r:该档名是否存在且具有可读权限
    -w:该档名是否存在且具有可写权限
    -x:该档名是否存在且具有可执行权限
    --->test -e /dmtsal && echo "exist" || echo "not exist"

    (3)两个文档之间的比较
    test file1 -nt file2
    -nt:判断file1是否newer than file2
    -ot:判断file1是否older than file2
    -ef:判断两个文档是否指向同一个inode

    (4)两个整数之间的比较
    test n1 -eq n2
    -eq:equal
    -ne:not equal
    -gt:greater than
    -lt:less than
    -ge:greater than or equal
    -le:less than or equal

    (5)字符串的判断
    test -z string:string是否为空
    test -n string:string是否为非空
    test str1 = str2:str1是否等于str2
    test str1 != str2:str1是否不等于str2

    (6)多重条件判断
    test -r filename -a -x filename
    -a:and,两种情况同时成立
    -o:or,两种情况之一成立
    !:反相状态,如test ! -x file,当file不具有x时,返回true

    6.利用判断符合[]
    (1)比如[ -z "$HOME" ];echo $?
    注意:使用[]来进行判断时中括号内的每个组件都要有空格符分隔,变量或常数要用双引号括起来:
    [ "$HOME" == "$MAIL" ]
    (2)中括号常用在条件判断式中
    [ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue" && exit 0
    也可以写成:["$yn" == "Y"] || ["$yn" == "y"]

    7.shell script的默认变量($0,$1)
    filename opt1 opt2 opt3 opt4
    执行的脚本filename对于$0这个变量,op1对应$1,opt2对应$2。。。
    除此以外,还有以下特殊变量:
    $#:代表后接的参数个数
    $@:代表["$1" "$2" "$3" "$4"]
    $*:代表["$1 $2 $3 $4"]

    8.shift:造成参数变量号码的偏移
    vi test.sh s1 s2 s3 s4 s5 s6
    echo "shift前共有6个变量"
    shift
    echo "shift后共有5个变量,分别是s2 s3 s4 s5 s6"
    shift 3
    echo "shift后共有2个变量,分别是s5 s6"

    9.条件判断式(若等号两边有空格,必须[(空格)条件(空格)])
    if [条件判断式]; then
        条件成立时的命令内容
    fi  #结束if语句

    10.复制条件判断式
    (1)
    if [条件判断式一]; then
        条件成立时的命令内容
    else
        条件不成立时的命令内容
    fi  #结束if语句

    (2)
    if [条件判断式一]; then
        条件一成立时的命令内容
    elif [条件判断式二]; then
        条件二成立时的命令内容
    else
        条件一二不成立时的命令内容
    fi  #结束if语句

    10.利用case...in...esac判断
    case $variablename in
    "first-variable-content")
        操作
    ;;
    "second-variable-content")
        操作
    ;;
    *)
        操作
    ;;
    esac

    11.函数function功能
    由于shell script的执行方式是由上到下,由左到右,所以function的设定一定要在程序的最前面,这样在执行时才能被找到。
    function fname(){
        程序段
    }
    如:
    function printit(){
        echo "Your choice is $1"
    }

    printit 2
    --->结果是:Your choice is 2
    (这里的$1是指函数调用时后接的参数,跟调用脚本时:./test.sh para1的$1是不一样的)


    12.循环
    while [ 条件判断式 ]
    do
        程序段
    done
    当condition成立时,就进行循环,直到条件不成立

    或者
    until [ condition ]
    do
        程序段
    done
    当condition成立时,就终止循环,否则持续进行循环

    或者
    for var in con1 con2 con3 ...
    do
        程序段
    done
    如:
    network="192.168.1"
    for sitenu in $(seq 1 100)  #seq为sequence连续的缩写
    do
        ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0|result=1
        if [ "result" == 0 ];then
        echo "Server ${network}.${sitenu} is Up"
        else
        echo "Server ${network}.${sitenu} is Down"
        fi
    done

    或者
    for...do...done的数值处理
    for(( 初始值;限制值;执行步阶 ))
    do
        程序段
    done
    如:
    s=0
    for((i=1;i<100;i=i+1))
    do
        s=$(($s+$i))
    done

    13.shell script的追踪与debug
    sh [-nvx] scripts.sh
    -n:不要执行脚本,仅查询语法的问题
    -v:在执行脚本前,先输出脚本的内容
    -x:将使用到的脚本内容显示到屏幕上

  • 相关阅读:
    filter
    验证
    HTML5 canvas 内部元素事件响应
    canvas 椭圆
    计算2点角度
    复制pdf文字出来是乱码的一种可能的解决方案
    LaTeX Pdf to Word
    论文题录导入导出的困惑
    公式测试
    [LaTex]Visio文件转EPS文件[转]
  • 原文地址:https://www.cnblogs.com/bangbangjiang/p/4080424.html
Copyright © 2011-2022 走看看