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

     
    想要看更美观的可以查看http://leanote.com/s/578dcd73b98e0f30d2000001

    常用的参数

    变量名 说明

    • $n 传递给脚本的第n个参数
    • $# 命令行参数个数
    • $0 当前脚本名称
    • $* 以“参数1 参数2 参数3…”的形式返回所有参数值
    • $@ 以“参数1” “参数2” ”参数3“…的形式返回所有参数值
    • $_ 保存之前执行的命令的最后一个参数
    • $? 最后运行的命令的结束代码(返回值)
    • $$ Shell本身的PID(ProcessID)
     

    定义变量:

    1. 显式赋值:your_name="jans"
    2. 用语句赋值:for file in `ls /etc` (注意:这里不是单引号,是反引号)
     

    使用变量:

    1. echo $your_name 或者 echo ${your_name} 一般尽量带上大括号
     

    重新定义变量:

    1. your_name="jessica" 注意:重新定义的时候不能使用$,只有使用变量的时候才用$
     

    字符串:

     

    单引号:

    1. str='this is a string' //单引号中不能出现变量,单引号中不能出现单引号(转移的单引号也不行)
     

    双引号:

    1. str="hello,I know you are "$your_name"!! " //双引号中可以有变量,可以出现转义字符
     

    拼接字符串:

    1. a="hello "
    2. b="world!"
    3. echo $a $b
     

    获取字符串长度:

    1. echo ${#your_name}
     

    提取子字符串:

    1. echo ${your_name:1:4} //输出第2到第5,一共4个字符
     

    查找子字符串:

    1. string="alibaba is a great company"
    2. echo `expr index "$string" is`#输出:8,这个语句的意思是:找出单词is在这名话中的位置
     

    流程控制:

    1. linux中[是一个命令,在/usr/bin/[,所以[后面一定要加空格
     

    if else语句:

    1. if condition1;
    2. then
    3. command1;
    4. elif condition2;
    5. command2;
    6. commandN;
    7. else
    8. command;
    9. fi
     

    快捷if:

    1. [ ] && [ ] ||
    2. &&如果是“前面”,则“后面”
    3. [ -f /var/run/dhcpd.pid ] && rm /var/run/dhcpd.pid 检查文件是否存在,如果存在就删掉
    4. ||如果不是“前面”,则后面
    5. [ -f /usr/sbin/dhcpd ] || exit 0 检验文件是否存在,如果存在就退出
    6. [ -z "$1" ] && help 如果第一个参数不存在,就显示help
    7. [ "$1" = "-h" ] && help 如果第一个参数是-h,就显示help
     

    for语句:

    1. for i in item1 item2 itemN
    2. do
    3. command1
    4. command2
    5. done
    6. 写成一行:for i in item1 item2...itemN;do command1;command2;done;
    7. for i in $(seq 0 4);do echo "second for :$i";done
    8. for i in `seq 0 4`;do echo "third for:$i";done
    9. for i in {0..4};do echo "fourth for:$i";done
    10. for (( i=0; i<10; i++))
    11. do
    12. command1;
    13. command2;
    14. done
     

    while语句:

    1. while condition
    2. do
    3. command
    4. done
     

    无限循环1

    1. while :
    2. do
    3. command
    4. done
     

    无限循环2

    1. while true
    2. do
    3. command
    4. done
     

    无限循环3

    1. for (( ; ; ))
     

    until:

    1. until condition
    2. do
    3. command
    4. done
     

    case:

    1. 每个case需要esac作为结束标记,用)表示分支,用两个分号表示break
    2. case "${var}" in
    3. "Aoptions" )
    4. commandA
    5. exit
    6. ;;
    7. "Boption" )
    8. commandB
    9. exit
    10. ;;
    11. "Exit" )
    12. exit
    13. ;;
    14. * ) echo "Bad option,please choose again"
    15. esac
     

    select选择项语句

    1. #!/bin/bash
    2. PS3="请选择菜单"
    3. select i in "java" "php" "scala" "spark"
    4. do
    5. echo "你选择了:"$i $i $i
    6. exit
    7. done
     

    条件表达式

     

    文件表达式

    1. if [ -f file ] 如果文件存在
    2. if [ -d ... ] 如果目录存在
    3. if [ -s file ] 如果文件存在且非空
    4. if [ -r file ] 如果文件存在且可读
    5. if [ -w file ] 如果文件存在且可写
    6. if [ -x file ] 如果文件存在且可执行
     

    整数变量表达式(> 和<不能用于比较大小 ,会被当作尖括号)

    1. if [ int1 -eq int2 ] 如果int1等于int2
    2. if [ int1 -ne int2 ] 如果不等于
    3. if [ int1 -ge int2 ] 如果>=
    4. if [ int1 -gt int2 ] 如果>
    5. if [ int1 -le int2 ] 如果<=
    6. if [ int1 -lt int2 ] 如果<
     

    字符串变量表达式

    1. if [ $a = $b ] 如果string1等于string2
    2. if [ $string1 != $string2 ] 如果string1不等于string2
    3. if [ -n $string ] 如果string 非空(非0),返回0(true)
    4. if [ -z $string ] 如果string 为空
    5. if [ $string ] 如果string 非空,返回0 (和-n类似)
     

    逻辑表达式

    1. 逻辑非 ! //if [ ! -d $num ] 如果不存在目录$num
    2. 逻辑与 a //if [ 表达式1 –a 表达式2 ]
    3. 逻辑或 -o //if [ 表达式1 –o 表达式2 ]
    4. 例如:if [ -z "$JHHOME" -a -d $HOME/$num ]如果变量$JHHOME为空,且$HOME/$num目录存在
     

    其他

    • source myscript.sh 等价于 ./myscript.sh
    • If [ $str ] 等价于 if [ -n $str ] //判断字符串变量是否为空
    • shell中0为真,非0为假
    • = 作为等于时,其两边都必须加空格,否则失效
    • =赋值时等号两边不能有空格
    • -eq -ne -lt -nt 只能用于整数,不适用于字符串,字符串判断等于用等号 var=”yes” if [ $var -eq “yes” ] //错误!!!,-eq不能用于字符串
    • shell中整形变量不能直接if,必须if [ i –ne 0 ],但可以支持字符串变量if // if [ str ]
    • if command 等价于 command + if $?
    #!/bin/sh 
    if 
      cat 111-tmp.txt | grep ting1
      then
      echo found
    else
      echo “no found”
    fi
    #!/bin/sh
    cat 111-tmp.txt | grep ting1 
    if [ $? -eq 0 ] 
      then 
      echo $? 
      echo found 
    else 
      echo $? 
      echo “no found” 
    fi
  • 相关阅读:
    缓存
    java垃圾回收机制GC(Garbage Collection)
    设计模式之适配器模式
    数据的水平分片意义
    屏幕坏点简单检查方法(网页纯色检查)
    Mac OS X上如何实现到Linux主机的ssh免登陆[forward]
    25个必须记住的SSH命令[forward]
    资料链接整理
    JAVA学习网站收集
    详细介绍ORACLE sqlplus命令(转)
  • 原文地址:https://www.cnblogs.com/qlong8807/p/5685436.html
Copyright © 2011-2022 走看看