zoukankan      html  css  js  c++  java
  • Bash

    当我们登陆到终端机(tty)之后,Linux会依据/etc/passwd中的设置给我指定一个shell(默认是bash,即B-shell),然后就可以使用这个shell做相关的操作了,下面记录bash的详细内容。

    shell是面向命令处理的语言,提供的流程控制结构通过对一些内部命令的解释实现

    一、一个bash的例子:listdir

    #!/bin/sh
    if [ $# = 0 ]
    then 
      dir=.
    else
      dir=$1
    fi
    find $dir -type d –print
    

     这里就是列出目录,$#参数个数,$1第一个参数,具体后面详见后面

    二、输入重定向

    <filename 
    从文件filename中获取stdin
    例如: sort < telno.txt
    

    三、sh变量

    变量存储的是字符串,执行过程中可以被修改,第一个字符是字母,后面是字母数字下划线都可以

        赋值和引用

    arg=123321nsad

    echo $arg

    echo ${arg} 加上了{}可以显式的决定变量的边界

    注意赋值的时候等号两边不能加空格,引用的时候用$引用,bash自动完成变量的替换

    变量没定义,就是空串

    只读变量   

    arg=123
    readonly arg

    这样就不能对于只读变量的值进行修改了

    删除变量

    unset arg
    

    unset不能删除只读变量

    echo命令

    echo arg1 arg2 arg3 ...

    打印各命令行参数,每两个间用一空格分开,最后打印换行符
    -e 开启转义,常见的转义有:

    c 打印完毕,不换行   退格
     
     换行   
     回车 	 水平制表 \ 反斜线
     
    nn    八进制描述的字符ASCII码

    还有printf命令,与c语言的printf很相似

    read

    从标准输入读入一行内容赋值给变量

    read xxx  这样就能把输入的值赋给xxx

    字符串

    #字符串的拼接
    name=liangzhuang
    string="thu name is ${name}!"
    #获取字符串长度
    string="the string"
    echo ${#string}
    #提取子字符串
    echo ${string:1:4}   #输出the 
    #查找子字符串的位置
    echo `expr index "$string"  t`  # 输出t的匹配的位置

     数组array_name=(value0 value1 value2 value3)array_name[0]=value0

    array_name[1]=value1
    array_name[n]=valuen
    #获得数组元素
    valuen=${array_name[n]}
    #获得数组的所有元素
    echo ${array_name[@]} 
    或者
    echo ${array_name[*]} #数组长度 ${#array_name[@]} 或者 ${#array_name[
    *]} # 取得数组单个元素的长度,就是第n个元素的具体长度 lengthn=${#array_name[n]}

    参数传递

    $0 为执行的文件名
    $i  第i个参数,i超过9 应该为${i}
    $# 参数个数
    $$ 当前脚本运行的进程号
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 上一条命令是否执行成功 ,0表示成功
    $* 与 $@ 都是表示全部参数,前者把参数作为一个字符串,后者保留n个参数的n个字符串

     算数运算符

    一般是调用 expr 进行算数运算的
    echo `expr $a + $b` 
    echo `expr $a * $b`
    echo `expr $a / $b` 
    echo `expr $a % $b`
    #这个每个符号两边都要加空格,除法就是int型的运算规则,截尾
    
    [ $a == $b ]  相等判断
    [ $a != $b ]  相等判断
    a=$b 赋值
    

    关系运算符

    只支持数字,不支持字符串
        [ $a -eq $b ] 
        [ $a -ne $b ] 
        [ $a -gt $b ] 
        [ $a -lt $b ] 
        [ $a -ge $b ]
        [ $a -le $b ]

    布尔运算符

        [ ! false ] 返回 true。
        [ $a -lt 20 -o $b -gt 100 ]
        [ $a -lt 20 -a $b -gt 100 ] 

    字符串运算符

    [ $a = $b ] 
    [ $a != $b ] 
    [ -z $a ]   长度为0返回true
    [ -n $a ]  长度不为0返回true
    [ $a ]       不为空返回true

    文件测试运算符

    -rwx 权限
    -s 文件是否为空,不为空为true
    -e 检测文件(包括目录)是否存在,如果是,则返回 true-bcdf 文件类型
    使用例子
    [-r $file] 判断文件是否可读

    以上的[] 实际上是与test命令等价的

    输入输出重定向

    输出重定向会覆盖文件内容,如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾
    ech “追加文字" >> file
    
    #输入重定向
    command1 < file1  #把file1作为命令的输入
    
    一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
       标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
       标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
       标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
    默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file
    command 2 >> file       把错误输出 追加到file
    command > file 2>&1     先把命令输出重定向到file,在把错误重定向到stdout,此时stdout就是 file
    command < file1 >file2  command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2
    command > /dev/null 2>&1 禁止该命令输出任何内容

    n>file 将文件描述符为 n 的文件重定向到 file。
    n>>file 将文件描述符为 n 的文件以追加的方式重定向到 file。
     

     流程控制!!


      

     

        

  • 相关阅读:
    反射+自定义注解,实现获取注解标记的属性
    jeecg导出Excel
    Date类的getYear(),getMonth过时,现在的获取方法
    Mysql的sql语句,Delete 中包含 not in
    EhCache与Redis的比较
    SpringMVC+Bootstrap项目
    按位运算| ^
    按步长检索数据,放缓有问题数据的处理
    DateTime 格式相比较,timestampdiff() 函数的运用
    作用域在函数定义时就已经确定了。而不是在函数调用时确定
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/6622618.html
Copyright © 2011-2022 走看看