zoukankan      html  css  js  c++  java
  • Linux_Bash脚本基础

    目录

    Bash使用基础

    1. 显示脚本的执行的详细步骤:

    sh -x shellScript.sh

    2. 判断一条指令是否执行成功

    netstat -lpntu | grep 80
    echo $?
        #If output=0 --> 执行指令成功
        #If output=1 --> 执行指令不成功

    if 语句

    格式:

    if [ Param1 逻辑运算符 Param2 ]
        then
        commands1
        elif
        commmands2
        else
        commands3
    fi

    Example:

    ############################    判断服务启动状态
    service httpd start &> /dev/null
    service httpd status &> /dev/null
        if [ $? -eq 0 ]
            then
            echo "start httpd successfully!"
            else
            echo "start httpd faild!"
        fi
    ############################# SCRIPT END

    运算符

    $:Shell 中的特殊变量
        a. $0 --> 表示Shell或Shell Script的名字
        b. $* --> 以一对双引号给出参数列表
        c. $@ --> 将各个参数分别加双引号返回
        d. $# --> 表示参数的个数
        e. $! --> 代表最后执行的后台指令的PID 
        f. $$ --> 代表所有指令的PID
        g. $_ --> 表示上一个命令的最后的一个参数
        h. $? --> 代表上一个指令执行后的退出状态
        i. $Number --> 代表脚本名后跟这第Number个参数
    ''"": 单双引号表示字符 
    ``: 撇号表示执行``中的指令后返回的结果,并且以列表的形式存放,可以结合for循环语句,将指令执行的结果作为循环的条件

    逻辑表达式

        -gt --> > greater than 大于
        -ge --> >= greater equal 大于等于
        -lt --> < less than 小于
        -le --> <= less equal 小于等于
        -eq --> = 等于
        -ne --> != not equal 不等于    
        -z --> null 为空
        -f --> 判断是否存在

    Example:
    判断是否存在D/N.tar.$H文件 –> 判断是否存在 -f

    if [-f $D/$N.tar.$H]

    不将执行指令的结果显示出来

    Commands &> /dev/null
    Example:

    service httpd start &> /dev/null

    echo 语句

    不换行显示:

    echo -n
    echo -n "HI Jmilk!" ; echo "How are you?"

    获取变量内的体积

    echo ${#names}

    从Bash接受输入参数

    ########################## 从Bash接受一个参数,再返回一个输出
        read -p "Ple input the parameter !" param
        echo -n "Parameter is "
        echo $param
    ########################## SCRIPT END

    Case语句

    一般用于程序启动脚本
    Syntax:

    case $1 in
        Param1)
            Commands
            ;;
        Param2)
            Commands
            ;;
        *)
            Commands
        esac

    Example:

    #!/bin/bash -e
    #/bin/bash -e 表示系统发生第一个错误时就中止脚本执行
    #每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。
    # chkconfig:35 12 45
    #第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 – 代替运行级。
    # description:Service start script
    #第二行对服务进行描述,可以用 跨行注释。
    RETVAL=0
    case $1 in
    start)
      echo "service starting..."
      ;;
    stop)
      echo "service stopping..."
      ;;
    restart)
    #$0 meating is this one script
      sh $0 stop || true
    # $0 stop || ture  表示出现错误时候不想中止的指令
      sh $0 start
      ;;
    *)
      echo "input syntax error!"
      echo "Usage:Is [start|stop|restart]"
      exit 1
      ;;
    esac
    echo $RETVAL
    ###################################SCRIPT END

    循环

    for 语句

    格式1:

    for VariableName in Parameter1 Param2 Param3
    do 
        commands
    done

    格式2:

    for ((初始值;限制值;执行步进))
    do
         commands
    done

    Example:

    #################################### 批量创建用户
    #!/bin/bash
    n=`cat /root/userList.txt`
    #``内的指令结果赋值给vairable n
    for name in $n
    do
    useradd $name
    echo 123 | passwd --stdin $name
    done    
    ###################################### SCRIPT END

    While语句

    格式:

    while 条件
    do
        commands
    done

    Example:

    ##################################### 猜价格脚本
    #!/bin/bash
    num=`echo $((RANDOM%1000+1))`
    echo "Welcome use!"
    while true
    do
    read -p "input a number(1-1000)" n
    let t++
    if [ $n -eq $num ]
        then echo "Right!The price is {num}}"
        echo "You make a guess at ${t}"
        break
    elif [ $n -gt $num ]
        then echo "greater then"
    else
        echo "less then"
    fi
    done
    ###################################### SCRIIPT END

    内置变量和函数

        a. 获取随机数 RANDOM:
            echo $RANDOM
            echo $((RANDOM%100+1)) #生成1-1000的随机数
        b. 判断是否为整型:
            num.isdigit(variableName)
        c. 定义列表
            list=[vairabe1,variable2
        d. 为列表添加元素
            list.append('%s' % variableName)
        e. 从列表中删除一个数
            listTableName.remove('%s' % variable)
        f. 从列表中随机选取一个数
            c=random.choice(listTableName)
        g. 判断一个元素是否在列表中
            if 'variabeName' in list listTableName

    AWK Command

    awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
    工作原理:读入并分割有’ ’换行符的的一天记录,再将这条记录以(-F ” “)指定的特定分割符来划分出域,填充域,最后使用Number 来选择显示第几个域并{printNumber} 显示。没有-F指定特定分隔符时,默认分隔符为”空白键” 或 “[tab]键”。

    grep ^user /etc/passwd | awk -F : '{print $1}'| grep -v ^root
  • 相关阅读:
    gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性
    线性表的顺序存储实现
    汉诺塔问题, 用递归方法求集合中的中位数
    共用体union
    洛谷3384:【模板】树链剖分——题解
    BZOJ4196:[NOI2015]软件包管理器——题解
    BZOJ3140:[HNOI2013]消毒——题解
    BZOJ1059:[ZJOI2007]矩阵游戏——题解
    洛谷4277:萃香的请柬——题解
    BZOJ1854:[SCOI2010]连续攻击游戏——题解
  • 原文地址:https://www.cnblogs.com/jmilkfan-fanguiju/p/11825194.html
Copyright © 2011-2022 走看看