zoukankan      html  css  js  c++  java
  • shell笔记

    //名词解释  
    bash(Bourne-Again Shell)是shell的一种,编写该外壳程序的人名叫Bourne shell,“bourne”与“born”的发音相近,意为shell的重生?bash是一个为GNU计划编写的Unix shell,是许多Linux发行版的默认Shell...
    
    > `#!` 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序,shell扩展名为 sh(sh代表shell),扩展名并不影响脚本执行...
    
    alias把一个常用的并且很长的指令别名一个简洁易记的指令,alias会看到目前系统预设的alias 
    
        $ alias
    	alias ll='ls -l'
    	alias ls='ls -F --color=auto --show-control-chars'
    	alias node='winpty node.exe'
    
    echo 向窗口输出文本  
    
        $ echo 'leyi'
        leyi
    
    
    通配符 *匹配零个或多个字符,?匹配一个字符
    输入输出从定向,用于将命令的结果输入到文件中而不是屏幕上
    
    
    > 输出重定向 >  
    > 追加重定向 >>
    
    
    定义和使用变量,使用变量时变量名外面的花括号可选   
    
        $ echo ${leyi}
        qiezijiucai
    
    只读变量 readonly将变量定义为只读变量,不可更改  
    删除变量 unset可以删除变量,不能删除只读变量
    
        Administrator@SZ-20170103URLF MINGW64 ~
        $ leyi="zzn"
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ readonly leyi
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ leyi="qiezijiucai"
        bash: leyi: readonly variable
    
        $ unset leyi
        bash: unset: leyi: cannot unset: readonly variable
    
    变量类型
    > 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量   
    
    > 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    
    > shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
    
    字符串的单双引号 
    
    > 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的  
    > 单引号字串中不能出现单引号  
    > 双引号里可以有变量  
    > 双引号里可以出现转义字符  
    
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo o this is "$leyi"
        o this is zzn
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo o this is '$leyi'
        o this is $leyi
    
    
    获取字符串长度 
    
        $ echo ${#str}
        7
    
    提取子字符串 从字符串第0个字符开始截取2个字符  
    ${str:开始索引:长度}
        
        $ echo ${str:0:2}
        ab
    
    expr index求索引 (expr 是一款表达式计算工具)   
    >这里的索引不是从0开始,而是从1开始算起,返回0,表示查找失败 
    >查找的是第一个符合条件的字符所在的位置
    
        $ echo `expr index "${str}" b`
        2
    
    数组操作
    
    > 用括号来表示数组,数组元素用"空格"符号分割开  (1 2 3 4 5)
    
        $ arr=(1 2 3 4 5 )  //定义数组
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ arr[5]=6   //定义数组方式2
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo ${arr[5]} //获取数组指定索引的值
        6
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo ${arr[@]} //读取数组
        1 2 3 4 5 6
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo ${#arr[@]} //获取数组长度
        6
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo ${#arr[*]} //获取数组长度方式2
        6
        
        Administrator@SZ-20170103URLF MINGW64 ~
        $ echo ${#arr[1]} //获取数组指定索引值的长度
        1
    
    shell 注释 # 只有单行注释
    
    字符串的截取 (注*的位置) 
    ># 号截取,删除左边字符,保留右边字符,从左边开始
    
        Administrator@SZ-20170103URLF MINGW64 ~
        $ url="http://www.cnblogs.com/leyi/"
    
        $ echo ${url#h}
        ttp://www.cnblogs.com/leyi/
    
        $ echo ${url#*www} //删除左边字符0到多个直到www(第一个www) 
        .cnblogs.com/leyi/ 
    
        $ echo ${url##*l} //删除左边字符0到多个直到l(最后一个l)
        eyi/
        
    >%号截取,删除右边字符,保留左边字符,从右边开始 
    
        $ echo ${url%/*}  //删除一个/和右边的字符
        http://www.cnblogs.com/leyi
    
        $ echo ${url%%/*} //删除最后一个/和右边的字符
        http:
    
    传递参数
      
        echo '1212'
        echo $0 //$0 为执行的文件名
        echo $1 //$1 为执行脚本的第一个参数
        echo $? //命令的退出状态。0表示没有错误
    
    算数运算符  + - * / % = == != 
    
    > 表达式和运算符之间要有空格 1 + 1而不是1+1  
    > 完整的表达式要被 ` ` 包含  
    > 乘号前边要加反斜杠   
    > 条件表达式要放在方括号中  [ 1 -eq 1 ]
    > if...then...fi 是条件语句  
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/新建文件夹
        $ value`expr 10 + 10`
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/新建文件夹
        $ echo $value
        20
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/新建文件夹
        $ echo `expr 10 * 20`
        200
    
    
    关系运算符 -eq -gt -lt -le -ge  
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/新建文件夹
        $ if [ 10 -lt 20 ]; then  echo 1; else  echo 2; fi
        1
    
    布尔运算符  ! 非 -o 或 -a 并
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/新建文件夹
        $ if [ 1 -gt 2 -o 1 -eq 1 ]; then echo '1'; else echo '2'; fi
        1
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/新建文件夹
        $ if [ 1 -gt 2 -a 1 -eq 1 ]; then echo '1'; else echo '2'; fi
        2
    
    逻辑运算符  || &&  两个方括号
    
        Administrator@SZ-20170103URLF MINGW64 ~
        $ if [[ $a -eq $b && $a -lt $b ]]; then echo '1'; else echo '2'; fi
        2
    
    字符串运算符  = != -z -n string本身  
     
        $ a="hello"; b="halo"; if [ $a = $b ]; then echo 'true';else echo 'false'; fi
        false
    
        $ a="hello"; b="halo"; if [ $a != $b ]; then echo 'true';else echo 'false'; fi
        true
    
        //-z 字符串长度为0返回true
        $ if [ -z 'a' ]; then echo '字符串长度为0'; else echo '字符串长度不为0'; fi;
        字符串长度不为0
    
        /字符串长度不为0返回true
        $ if [ -n 'a' ]; then echo '字符串长度不为0'; else echo '字符串长度为0'; fi;
        字符串长度不为0
         
        //字符串长度不为空返回true
        $ if [ 'a' ]; then echo '字符串长度不为空'; else echo '字符串长度不为空'; fi;
        字符串长度不为空
    
    文件测试运算符  
    
    > -d 是否是目录   
    > -f 是否是普通文件,非目录和设备文件,设备文件(鼠标,麦克风,显示器)  
    > -r 是否可读  
    > -w 是否可写  
    > -x 是否可执行 
    > -s 文件是否为空 
    > -e 文件是否存在 
    
        $ if [ -d wc ]; then echo '1';else echo "2"; fi;
        1
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test -e haha.txt; then echo 1;else echo 2;fi;
        1
    
    
    echo命令  跟php一样   
    
    > 反斜杠是转义符  
    
        $ echo "qwqw"
        "qwqw"
        
    printf 命令    %s %c %d %f 
    
        // %s 宽度为10个字符 %-10s 宽10个字符 -左对齐,没有-右对齐
        $ printf "%-10s %-10s %-10s" 第一列 第二列 第三列
        第一列  第二列  第三列
    
        // %.3f 保留三位小数  
        $ printf "%-10s %-10s %-10.3s
    " hello world 7.7777
        hello  world  7.7
    
    test 命令  
    
    > 数值测试  -eq -ne -gt -ge -lt -le 
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ a=1
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ b=2
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test $a -eq $b;then echo 1;else echo 2;fi;
        2
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test $[a] -eq $[b]; then echo 1; else echo 2;fi;
        2
    
    
    >  [] 可以执行基本的算数运算
         
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ echo `expr $a + $b` 
        30
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ a=10;b=20;echo $[a+b]
        30
    
    > 字符串测试 = != -z -n 
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test 'a' != 'b';then echo 1;else echo 2; fi;
        1
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test -z '';then echo 1;else echo 2; fi;
        1
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test -z 'a';then echo 1;else echo 2; fi;
        2
    
    
    
    > 文件测试 -d -r -w -x -s -d -f 
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test -e haha.txt;then echo 1; else echo 2;fi;
        1
    
    流程控制语句  
    
    > if then else fi 如果else分支没有语句执行,就不写else 
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test -e haha1.txt;then echo 1; else {};fi;
        bash: {}: command not found
    
    > if else elif else fi;
    
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ if test 1 -eq 2;then echo 1; elif test 1 -eq 1;then echo 2; else echo 3;fi;
        2
    
    >for 循环  for 变量 in 数组
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ for aa in $arr; do echo $aa;done;
        1
        2
        3
        4
        5
    
    >while 语句  while do done  
    
        let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来
    
        //(()) 省去$符号的算术运算
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ while((num<=10)); do echo $num; let "num++"; done;
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
    
      
    >case 语句 case in 匹配值1) xxx;; *) xxx;; esac;
    
        // 1) 匹配条件 ;; 两个分号结束 *)无一匹配走这里  
        // continue 仅跳出当前循环  break 跳出所有循环 
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ read num
        1111
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ echo $num
        1111
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ echo "请输入数字"; read num;
        请输入数字
        1
        $ case $num in 1) echo $num;; *) echo "halo";;
        > esac; # case 的反转 
        1
    
    
     函数  
    
        //定义函数 function fnname(){} 
        //或者 fnname(){}  
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ function fn1(){
        > echo 1111
        > }
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ fn1
        1111
    
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ fn1(){
        > echo 11111
        > }
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ fn1
        11111
    
        //传递参数  
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ fn2(){
        > echo $# 
        > echo $1
        > echo $@
        > echo $$
        > }
        
        Administrator@SZ-20170103URLF MINGW64 ~/Desktop/sh
        $ fn2 a b c d
        4 //参数的个数
        a //第一个参数 
        a b c d //返回每个参数
        4112 //进程id
       
    

      

  • 相关阅读:
    用grunt搭建自动化的web前端开发环境-完整教程
    redis 使用
    ubuntu系统安装redis
    redis resque消息队列
    linux下常用的命令
    介绍Mina的TCP的主要接口(一)
    Mina框架详解——简单的TCPClient
    Mina框架详解——简单的TCPServer
    Mina框架知识解析
    RabbitMQ新手入门Helloworld
  • 原文地址:https://www.cnblogs.com/leyi/p/8551895.html
Copyright © 2011-2022 走看看