zoukankan      html  css  js  c++  java
  • 简单过下bash/sh脚本基本知识吧

    1、sh/bash要注意空格的使用

    2、

    for循环:

    for i in /etc/profile.d/*.sh ; do
        if [ -r "$i" ]; then
            if [ "${-#*i}" != "$-" ]; then
                . "$i"
            else
                . "$i" >/dev/null 2>&1
            fi
        fi
    done

    while循环和多选择语句

    #!/bin/bash
    while :
    do
        echo -n "输入 1 到 5 之间的数字: "
        read aNum
        case $aNum in
            1|2|3|4|5) echo "你输入的数字为 $aNum!"
            ;;
    7|8)
    echo 'ok'
    ;;
    *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done

    函数定义方法:

    pathmunge () {
        case ":${PATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PATH=$PATH:$1
                else
                    PATH=$1:$PATH
                fi
        esac
    }

    函数参数:在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

    带参数的函数示例:

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    funWithParam(){
        echo "第一个参数为 $1 !"
        echo "第二个参数为 $2 !"
        echo "第十个参数为 $10 !"
        echo "第十个参数为 ${10} !"
        echo "第十一个参数为 ${11} !"
        echo "参数总数有 $# 个!"
        echo "作为一个字符串输出所有参数 $* !"
    }
    funWithParam 1 2 3 4 5 6 7 8 9 34 73
    输出结果:
    
    第一个参数为 1 !
    第二个参数为 2 !
    第十个参数为 10 !
    第十个参数为 34 !
    第十一个参数为 73 !
    参数总数有 11 个!
    作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

    注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。另外,还有几个特殊字符用来处理参数:

    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    -r 是否可读

    -x 是否可执行

    -w 是否可写

    -n str 字符串不为null,长度大于零

    -z str 字符串为null,长度为零

    -d 存在且是一个目录

    -e 文件存在

    -f 存在且是一个常规文件,非目录,非特殊类型文件

    -s 文件存在且不为空

    -O own所属的文件

    -G group所属的文件

    • -N file :在上次读取后,文件有改动
    • file1 -nt file2 :file1 比 file2 更新,以最后更新时间为准
    • file1 -ot file2 :file1 比 file2 更旧 ,以最后更新时间为准

     >或者<或者=是用于字符串的比较

    整数比较

    -gt 大于

    -ge 大于等于

    -lt 小于

    -le 不大于

    -eq 等于

    -ne 不等于

    && 与

    ||

    $1 第一个变量 $2依次类推

    $?上次的执行结果

    exit 0、exit 1等,表示程序运行完的执行结果

    export 把某个变量变为全局变量

    source 或者 . 执行,表示立即生效

    符号的用法:

    1、`cmd`

    2、[]:中括号两边都要有空格

    if [ "$EUID" = "0" ]; then
        pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
    else
        pathmunge /usr/local/sbin after
        pathmunge /usr/sbin after
        pathmunge /sbin after
    fi

    3、{} :{ cmd1;cmd2;cmd3;} 在当前shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后必须有分号, 第一条命令和左括号之间必须用空格隔开

    4、() :(cmd1;cmd2;cmd3) 新开一个子shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后可以没有分号

    5、;

    6、''  :里面的变量,不取值   a=2;echo 'shen $a'--->shen $a

    7、"" :里面的表里取值  a=2;echo "shen $a"--->shen 2

    shell内建命令:

    1、unset 命令用于删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量。-f:仅删除函数(function); -v:仅删除变量(variable)。
    2、set  命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。

    字符串提取和替换:  ${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}

           第一种模式:${var:num},这种模式时,shell在var中提取第num个字符到末尾的所有字符。若num为正数,从左边0处开始;若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如${var: -2}、${var:1-3}或${var:(-2)}。        
          第二种模式:${var:num1:num2},num1是位置,num2是长度。表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。不能为负数。
           第三种模式:${var/pattern/pattern}表示将var字符串的第一个匹配的pattern替换为另一个pattern。
           
           第四种模式:${var//pattern/pattern}表示将var字符串中的所有能匹配的pattern替换为另一个pattern。

    [root@centos ~]# var=/home/centos
    [root@centos ~]# echo $var
    /home/centos
    [root@centos ~]# echo ${var:5}
    /centos
    [root@centos ~]# echo ${var: -6}
    centos
    [root@centos ~]# echo ${var:(-6)}
    centos
    [root@centos ~]# echo ${var:1:4}
    home
    [root@centos ~]# echo ${var/o/h}
    /hhme/centos
    [root@centos ~]# echo ${var//o/h}
    /hhme/cenths

    参考:

    1、 http://man.linuxde.net/set
    2、http://www.runoob.com/linux/linux-shell-func.html

    3、http://blog.csdn.net/taiyang1987912/article/details/39551385

  • 相关阅读:
    Java函数调用
    Java编程工具的介绍
    Java关键字及作用
    Java面向对象
    Java代码内容概述
    Java构造方法
    Java面向对象
    Java数组概述和定义
    JDBC工具类,基于C3P0的数据库连接池,提供获取连接池、获取连接对象、释放资源和封装事务操作的方法
    图片爬虫工具,可以爬取指定网页的图片
  • 原文地址:https://www.cnblogs.com/shengulong/p/7940265.html
Copyright © 2011-2022 走看看