zoukankan      html  css  js  c++  java
  • linux shell 脚本攻略学习3

    1.Bash中的READ命令

    #读取n个字符存入变量

    read -n number_of_chars variable_name

    示例:

    amosli@amosli-pc:~$ read -n 2 var
    heamosli@amosli-pc:~$ echo $var
    he

    #不回显的方式读取密码

    read -s var

    示例:

    amosli@amosli-pc:~$ read -s var
    amosli@amosli-pc:~$ echo $var
    pw

    #显示提示信息

    read -p "Enter input:" var

    示例:

    amosli@amosli-pc:~$ read -p "Enter input:" var
    Enter input:hello,input
    amosli@amosli-pc:~$ echo $var
    hello,input

    #限时输入

    read -t  timeout var

    示例:

    amosli@amosli-pc:~$ read -t 2 var
    var
    amosli@amosli-pc:~$ echo $var
    var

    #设置界定符

    read -d delim_char var

    示例:

    read -d ":" var
    hello:

    2.字段分隔符和迭代器 

    内部字段分隔符,Internal Field Separator, IFS

    IFS默认为空白字符(换行符,制表符,空格)

    data="name,sex,age"
    oldIFS=$IFS
    IFS=,
    for item in $data
    do
            echo $item
    done

    输出:

    name
    sex
    age

    循环

    for循环

    for i in {a..z}; do actions; done;
    
    or
    
    for((i=0;i<10;i++))
    {
        commands;
    }

    while循环

    while condition
    do
        commands;
    done

    until循环,shell中很特殊的一种循环,直到满足条件为止

    示例:

    amosli@amosli-pc:~/learn$ x=0;
    amosli@amosli-pc:~/learn$ until  [ $x -eq 9 ];#condition 
    > do let x++; echo $x;
    > done
    1
    2
    3
    4
    5
    6
    7
    8
    9

    3.比较与测试(if、test)

     if条件:
    if conditon;
    then 
        commands;
    fi
    
    else if 和else;
    if condtion;
    then 
        commands;
    elif condtion;
    then 
        commands
    else
        commands
    fi

    if和else 语句可以进行嵌套。if的条件判断部分可能会变得很长,但可以用逻辑运算符将它变得简洁一些:

    [ condition  ] && action ;#如果condition为真,则执行action
    [ condition ] || action ; 如果condition为假,则执行action 
    &&是逻辑与运算符,||是逻辑或运算符

     算术比较:

    条件通常是放置在封闭的中括号内。一定要注意在'['或者']'与操作数之间是有一个空格.如果忘记,脚本就会报错。
    格式如下:
    [ $var  -eq 0 ]

    对变量或者值进行算术条件判断:

    -gt 大于
    -lt 小于
    -ge 大于等于
    -le 小于等于
    -ne 不等于
    -eq 等于

    实例:

    amosli@amosli-pc:~/learn$ var=3;
    amosli@amosli-pc:~/learn$ if [ $var -eq 0 ];
    > then
    > echo "var的值为0";
    > elif [ $var -lt 0 ];
    > then echo "var的值小于0";
    > else echo "var的值大于0";
    > fi
    var的值大于0

    多条件:

    amosli@amosli-pc:~/learn$ if [ $var -ne 0 -a $var2 -gt 2 ] ; 
    then echo "var的值 不等于0并且var2的值大于2"; 
    fi
    
    var的值不等于0并且var2的值大于2
    amosli@amosli-pc:~/learn$ var=1;var2=0;
    amosli@amosli-pc:~/learn$ if [ $var -eq 0 -o $var2 -eq 0 ];
    > then echo "var和var2有一个值为0" 
    > fi
    var和var2有一个值为0

    -a,-o  分别表示逻辑与and 和 逻辑或or 

    文件系统相关测试

     [ -f file_var ]:如果给定的变量包含正常的文件路径或文 件名,则返回真
     [ -x $var ] :如果给定的变量包含的文件可执行,则返回真,excute
     [ -d $var ] :如果给定的变量包含的是目录,则返回真,directory
     [ -e $var ] :如果给定的变量包含的文件存在,则返回真,exist
     [ -c $var ] :如果给定的变量包含的是一个字符设备文件的路径,则返回真
     [ -w $var ] :如果给定的变量包含的文件可写,则返回真,write
     [ -r $var ] :如果给定的变量包含的文件可读,则返回真,read
     [ -L $var ] :如果给定的变量包含的是一个符号链接,则返回真

    实例:

    amosli@amosli-pc:~/learn$ fpath="/home/amosli" ;
    amosli@amosli-pc:~/learn$ if [ -e $fpath ];
    > then 
    > echo "yes";
    > else echo "no";
    > fi
    yes

     字符串比较:最好写成双中括号,有时候单个中括号会产生错误'[[  ]]'

    = 等于,前后要加上空格,也可以写成 == ,两种写法

    amosli@amosli-pc:~/learn$ str1="yes";str2="yes";
    amosli@amosli-pc:~/learn$ if [[ $str1 = $str2 ]] 
    > then 
    > echo  "str1等于str2"
    > fi
    str1等于str2

    != 不等于

    amosli@amosli-pc:~/learn$ if [[ $str1 != $str2 ]] ; then  echo  "str1不等于str2";  else  echo "str1等于str2"; fi
    str1等于str2

    比较字母顺序的大小:

    [[ $str1 > $str2 ]]
    
    [[ $str1 < $str2 ]]

    判断是否为空字符串

    [[ -z $str1 ]]#是空字符串,zero
    [[ -n $str2 ]]#不是空字符串,not zero

    使用||,&&进行联合判断:

    amosli@amosli-pc:~/learn$ if [[ -n $str1 ]] && [[ -z $str2 ]] ; then echo "str1 is not  empty and str2 is empty"; fi
    str1 is not  empty and str2 is empty

    test命令可以用来执行条件检测

    amosli@amosli-pc:~/learn$ if test -n $str1; then echo "str1 is not empty"; fi
    str1 is not empty

    上面的例子可用 test命令改写为:

    amosli@amosli-pc:~/learn$ if test -n $str1 && test -z $str2 ;
    > then  echo "str1 is not  empty and str2 is empty"; fi
    str1 is not  empty and str2 is empty
  • 相关阅读:
    [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
    flex调用webservice中的datatable结果写入datagrid
    linux shell编程指南第十一章------------合并与分割2
    Java GUI使用exe4j打包exe文件
    最小生成树kruskal算法
    JQuery Datatable Ajax请求两次问题的解决
    其实我还好
    EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
    hdu1151Air Raid
    UIWebview打开.txt文件中文乱码解决
  • 原文地址:https://www.cnblogs.com/amosli/p/3481377.html
Copyright © 2011-2022 走看看