zoukankan      html  css  js  c++  java
  • [Linux]shell编程基础/linux基础入门

    声明执行程序
    #!/bin/bash

    用来告诉系统使用/bin/bash 程序来执行该脚本。譬如python 脚本,可以这样写:

    #!/usr/bin/python
     
    赋值和引用

    赋值公式:

    变量名=值

    取一个变量的值的时候,需要在变量名前面加上$ 符号,譬如:

    var="hello bash"
    echo $var

    如果出现拼接,而且又没有空格为分隔符,这个时候就需要使用大括号将变量括住,如:

    num=3
    echo "this is the ${num}th"

    其输出结果为:this is the 3th


    shell默认下是进行字符串操作的。所以如果要计算的话就不能这么使用了

    var=1
    var=$var+1
    echo $var

    其输出结果为:1+1

    对于数值计算的话有下面的方法

    复制代码
    var=1
    let "var+=1"          # let表示数学运算
    var="$[$var+1]"       # $[]表示对括号内的表达式进行数学运算,与(())感觉概念是一样的
    ((var++))
    var=$(($var+1))
    var="$(expr "$var" + 1)"        # expr表示整数运算
    var="`expr "$var" + 1`"
    复制代码
    嫌太乱的话,建议记住(($var+1))就好了。只需要记住两个括号内的内容会进行计算就好了。
     
    流程控制

    if语句

    复制代码
    if ...; then
      ...
    elif ...; then
      ...
    else
       ...
    fi
    复制代码


    一些常见的判断

    [ -f "file_path" ]     # 判断文件是否存在
    [ -x "file_path" ]    # 判断文件是否具有可执行权限
    [ -n "$var" ]           # 判断$var变量是否存在
    [ "$var1" = "$var2" ]    # 判断$var1和$var2是否相等

    []用来表示条件测试。注意空格,括号前后都需要空格。

    &&和||
    跟其它大部分语言一样,&&和||的意思都是差不多的。
    &&:如果第一个条件为ture则检查第二个条件/执行第二条语句;
    ||:如果第一个条件为false则检查第二个条件/执行第二条语句;
    所以就可以这么用了:

    [ -r "${file_path}" ] || { echo "Cannot read ${file_path}";exit 1; }

    意思是,如果文件不可读,则打印错误信息,并退出。

    case语句
    case是一个用来匹配字符串的表达式,不是数字哦。
    case表达式

    case ... in
    ...)
      ...;;
    esac

    例子

    复制代码
    #!/bin/bash
    
    case "$1" in
    "1")
      echo 1;;
    "2")
      echo "two";;
    *)
      echo "your input is $1";;
    esac
    复制代码



    循环
    while表达式

    while ...; do
      ...
    done

    for表达式

    for var in ...; do
      ...
    done

    这两个表达式都比较简单,没啥需要特别说明的。我发现不同的系统之间有些差异。我发现红帽是可以使用下面的表达式的,但是Debian却不可以。不知道是系统版本引起还是系统本身存在差异的缘故,我没有深究这个。

    for ((i=0;i++;i<10)); do
      ...
    
    done
     
    shell函数
    function_name(){
        #body of function
    }

    函数无论对于任何语言来说都是需要最基本掌握的。Shell的函数只需要在调用之前定义就好了。跟C语言一样,但不需要声明,跟C语言还是有区别的。
    Shell函数定义的时候不用写形参。调用的时候按照空格隔开多个参数传入就可以了。然后使用$1、$2、$3...这些参数来调用。
    下面是一个简单的递归调用例子:

    复制代码
    #!/bin/bash
    
    recursion(){
      echo $1;
      if [ "$1" -eq "0" ]; then
        echo "done"
      else
        recursion $(($1-1))
      fi
    }
    echo "start";
    recursion 5;
    复制代码
    上面虽然是一个很简单的例子,但是阐述了函数如何调用,如何传参。
  • 相关阅读:
    Qt读取JSON和XML数据
    IOS设计模式学习(19)策略
    Android学习笔记(二)之异步加载图片
    ETL-Career RoadMap
    HDU 1501 & POJ 2192 Zipper(dp记忆化搜索)
    CodeForces 242E
    推荐:室内定位API
    基于单片机的电子密码锁的实现
    [nagios监控] NRPE: Unable to read output 的原因及排除
    (ubuntu)在andorid andk工程中使用ccache加速编译速度
  • 原文地址:https://www.cnblogs.com/vpoet/p/4659670.html
Copyright © 2011-2022 走看看