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。
     

     流程控制!!


      

     

        

  • 相关阅读:
    Oracle函数如何把符串装换为小写的格式
    Oralce中的synonym同义词
    JS中getYear()的兼容问题
    How to do SSH Tunneling (Port Forwarding)
    所谓深度链接(Deep linking)
    upload size of asp.net
    发一个自动刷网站PV流量的小工具
    解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示"The operation could not be completed." 的问题。
    在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录
    使用SQL语句获取Sql Server数据库的版本
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/6622618.html
Copyright © 2011-2022 走看看