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

    ********空格
    1.定义变量,等号赋值时不能有空格
    var="/etc/passwd"
    2.条件测试字符串比较,等号前后要有空格
    [ $str1 = $str2 ]
    3.命令与选项间有空格
    4.管道|前后可有可无
    5.[是test的别名,其后必须有空格,]表示[的结束
    test expression 即 [ expression ]
    ********命令替换
    1.`cmd`
    2.$(cmd)
    允许将命令替换的结果赋值给变量
    var=$[$(cat /proc/meminfo | grep MemTotal | tr -d "MemTotal :kB")*256] 物理内存的1/4赋值给var
    ********整数运算
    1.$[ operation ]
    2.$(( operation ))
    ********改变IFS内部字段分隔符
    默认IFS是space,tab,newline在处理含有空格的数据(文件名)时可以替换默认分隔符
    IFSback=$IFS #保存默认分隔符
    IFS=$' ' #指定 为新的分隔符(搜索结果中含有空格)
    command......
    IFS=$IFSback
    1.IFS=$' '文本中的空白行不会输出(同理IFS=$' ')
    IFS=$" "文本中的空白行会输出
    2.其他符号可以直接赋值
    IFS=;:"?
    ******条件判断
    1.字符串判断(s1和s2)
    s1 = s2 s1和s2有相同内容和长度
    s1 != s2 s1和s2不同
    -n s1 s1长度非0
    -z s1 s1长度为0
    s1 > s2 s1大于s2
    s1 < s2 s1小于s2

    2.数字判断(i1和i2均为整数)
    i1 -eq i2 i1等于i2
    i1 -ne i2 i1不等于i2
    i1 -gt i2 i1大于i2
    i1 -ge i2 i1大于等于i2
    i1 -lt i2 i1小于i2
    i1 -le i2 i1小于等于i2

    3.文件判断
    -r fn 文件可读
    -w fn 文件可写
    -x fn 文件可执行
    -b fn 文件存在且是块文件
    -c fn 文件存在且是字符文件
    -d fn 文件存在且是目录
    -e fn 文件存在(Linux一切皆文件)
    -f fn 文件存在且是普通文件
    -g fn 文件存在且设置组id
    -G fn 文件存在且属于有效组id
    -h fn 文件存在且是符号链接
    -k fn 文件存在且设置sticky位
    -o fn 文件存在且属于有效用户
    -p fn 文件存在且是管道文件
    -s fn 文件存在且大小非0
    -t fn 文件描述符指定的设备是终端
    fn1 -nt fn2 fn1创建日期比fn2新
    fn1 -ot fn2 fn1创建日期比fn2旧

    4.复杂逻辑判断在[]内
    -a 与
    -o 或[ $yn = y -o $yn = Y ]
    ! 非

    5.复杂逻辑在[]外
    && 与
    || 或

    6.支持正则的字符串匹配[[]]
    [[ $var == regexpression ]] 变量var等于正则表达式
    [[ $var =~ regexpression ]] 变量var匹配正则表达式
    ******if
    1.expression为真(返回值为0)时执行then后面的command,then和if同行要求then前有;
    if [ expression ];then
    command
    fi
    2.expression1为真执行command1并结束,否则expression1为假expression2为真执行command2并结束,否则执行command3并结束
    if [ expression1 ];then
    command1
    elif [ expression2 ];then
    command2
    else
    command3
    fi
    ******for
    1.遍历list(数组,$var变量列表,$()命令替换结果集,通配符目录/home/*)
    for var in list
    do
    command
    done
    2.类似C的for循环,要求双括号
    for ((i=0;i<5;i++))
    do
    command
    done
    ********while
    expression为真执行command,command中要有改变expression的值避免陷入死循环
    while expression
    do
    command
    done
    ********until
    until expression
    do
    command
    done
    ********break
    终止最内层循环,break n终止由内到外第n层循环
    ********continue
    终止本次循环的剩余命令,继续开始下次循环
    ********数组
    1.定义
    array=(v0 v1 v2 v3...)
    array[0]=v0,array[1]=v1......
    array=($(command))
    2.取值
    ${array[$i]}
    3.长度
    ${#array[@]}
    ${#array[*]}
    4.遍历
    for i in ${array[*]}或${array[@]}
    do
    echo $i
    done
    5.删除
    unset array 清除整个数组
    unset array[$i] 清除单个元素
    6.替换
    ${array[@]/s1/s2} s2替换s1,不修改原数组,如需修改需用()赋值给新数组
    ${array[*]/s1/s2} s2替换s1,不修改原数组,如需修改需用()赋值给新数组
    7.分片
    ${array[@]:start:length} 截取start开始,长度length的新数组
    ${array[*]:start:length} 截取start开始,长度length的新数组
    ${array[*]:0:3}=(array[0] array[1] array[2])
    ********函数
    1.定义
    function function_name{
    command
    }
    function_name(){
    command
    }
    2.调用时传入的参数arg1,arg2在函数内部以$1,$2引用
    function_name arg1 arg2
    3.返回值
    只能用return语句返回一个0-255的整数
    ********变量扩展
    ********使用技巧
    1.用&&和||简化if else语句
    [ $num -lt 5 ] && echo "The number is less than 5" || echo "The number is great equal 5"
    2.vim中不需root权限保存编辑的文件
    :w !sudo tee %
    3.判断输入是y,Y,yes,YES

  • 相关阅读:
    C2B未来:大数据定制
    Linux开发环境的搭建和使用——Linux 常用的命令使用
    iebook 发布到网站 独家秘诀
    ZOJ 2679 Old Bill(数学)
    DFA最小化 -- Hopcroft算法 Python实现
    How to initialize a static const map in c++?
    新秀操作和维护注意事项:Windows关于使用Xshell管理你的云主机
    HDOJ 4883 TIANKENG’s restaurant
    谈论multistage text input(中国输入法)下一个UITextView内容长度的限制
    iOS 网络错误-分类
  • 原文地址:https://www.cnblogs.com/AiYS/p/9136406.html
Copyright © 2011-2022 走看看