zoukankan      html  css  js  c++  java
  • shell

    入门

    //第一个shell
    #!/bash/bin
    echo "hello world"
    //赋予执行权限
    chmod +x hello.sh
    ./hello.sh  或者 sh hello.sh
    

    变量设置规则

    1,变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。
    2,在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
    3,变量用等号连接值,等号左右两侧不能有空格。
    4,变量的值如果有空格,需要使用单引号或者双引号包括。
    

    用户自定义变量

    用户自定义的变量由字母或下划线开头,由字母,数字或下划线序列组成,并且大小写字母意义不同,变量名长度没有限制。
    设置变量:
    习惯上用大写字母来命名变量。变量名以字母表示的字符开头,不能用数字。
    

     变量调用

    变量调用在使用变量时,要在变量名前加上前缀“$”.使用echo 命令查看变量值。eg:echo $A

    1,定义时赋值:
    变量=值 
    等号两侧不能有空格
    eg:
    STR="hello world"
    A=9
    2, 将一个命令的执行结果赋给变量
    A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
    A=$(ls -la) 等价于反引号
    eg: aa=$((4+5))
    bb=`expr 4 + 5 `
    3,将一个变量赋给另一个变量
    eg : A=$STR
    变量叠加
    eg:#aa=123
    eg:#cc="$aa"456
    eg:#dd=${aa}789
    现象:单引号里的内容会全部输出,而双引号里的内容会有变化
    原因:单引号会将所有特殊字符脱意
    NUM=10    
    SUM="$NUM hehe"     echo $SUM     输出10 hehe
    SUM2='$NUM hehe'     echo $SUM2    输出$NUM hehe
    set  //列出所有的变量
    unset name //删除变量
    

    环境变量

    用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和其所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。
    export 变量名=变量值   申明变量
    作用域:当前shell以及所有的子shell
    

    位置参数变量

    $n n为数字,代表命令本身,1-代表第一到第个参数十以上的参数需要用大括号包含,如{10}。
    $* 代表命令行中所有的参数,把所有的参数看成一个整体。以"2 … $n"的形式输出所有参数
    $@ 代表命令行中的所有参数,把每个参数区分对待。以"2" … "$n" 的形式输出所有参数
    $# 代表命令行中所有参数的个数。添加到shell的参数个数

      

    shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不再可用

    $* **和 $@的区别**


    @ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以"2" … "$n" 的形式输出所有参数

    当它们被双引号" "包含时,"会将所有的参数作为一个整体,以1 n"的形式输出所有参数;"会将各个参数分开,以1""n" 的形式输出所有参数

    shell脚本中执行测试

    #!/bin/bash
    echo "test $*"
    for i in $*
    do
      echo $i
    done
    echo "test $@"
    for i in $@
    do
      echo $i
    done
    echo "test "$*""
    for i in "$*"
    do
      echo $i
    done
    echo "test "$@""
    for i in "$@"
    do
      echo $i
    done
    //测试运行shell脚本
    sh test.sh a b c d
    

    预定义变量

    $?  执行上一个命令的返回值   执行成功,返回0,执行失败,返回非0(具体数字由命令决定)
    $$ 当前进程的进程号(PID),即当前脚本执行时生成的进程号
    $! 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程   &
    # vi pre.sh
    pwd >/dev/null
    echo $$
    ls /etc  >/dev/null &
    echo $!
    

    read命令

    read -t 30 -p "please input your name: " NAME
    read -s -p "please input your age:" AGE  //隐藏查询
    read -n 1 -p "please input your sex [M/F]: " GENDER
    

    运算符

    (注意:运算符前后必须要有空格) 
    num1=11
    num2=22
    sum =$num1+$num2
    expr m + n 或$((m+n)) 
    expr 3 + 5   
    expr 3 – 5
    echo `expr 10 / 3`	
    10/3的结果为3,因为是取整
    expr  3 * 10     
     是转义符
    计算(2 +3 )×4 的值
    1 .分步计算
    	S=`expr 2 + 3`
    	expr $S * 4
    2.一步完成计算
    	expr `expr 2 + 3` * 4
    	S=`expr \`expr 2 + 3\`  * 4`
    	echo $S
    	或
    	 echo $(((2 + 3) * 4))
    $()与${}的区别
    $( )的用途和反引号``一样,用来表示优先执行的命令
    eg:echo $(ls a.txt)
    ${ } 就是取变量了  eg:echo ${PATH}
    $((运算内容)) 适用于数值运算
    eg: echo $((3+1*4))
    

    if

    if/else命令
    1,	单分支if条件语句
    if [ 条件判断式 ]
        then
            程序
    fi    
    或者
    if [ 条件判断式 ] ; then 
        程序
    fi
    eg:#!/bin/sh
    if  [ -x  /etc/rc.d/init.d/httpd ]
        then
        /etc/rc.d/init.d/httpd restart
    fi
    单分支条件语句需要注意几个点
    if语句使用fi结尾,和一般语言使用大括号结尾不同。
    [ 条件判断式 ] 就是使用test命令判断,所以中括号和条件判断式之间必须有空格
    then后面跟符号条件之后执行的程序,可以放在[]之后,用“;”分割,也可以换行写入,就不需要";"了。
    2,多分支if条件语句
    if [ 条件判断式1 ]
        then
            当条件判断式1成立时,执行程序1
    elif  [ 条件判断式2 ]  
        then      
            当条件判断式2成立时,执行程序2
    ...省略更多条件
    else
        当所有条件都不成立时,最后执行此程序
    fi
    

    事例

    eg:
    #!/bin/bash
    read -p "please input your name:"  NAME
    #echo  $NAME
    if [ “$NAME” == root ]
            then
                    echo "hello ${NAME},  welcome !"
            elif [ $NAME == tom ]
                    then
                            echo "hello ${NAME},  welcome !"
            else
                    echo "SB, get out here !"
    fi
    

    case

    case命令是一个多分支的if/else命令,case变量的值用来匹配value1,value2,value3等等。匹配到后则执行跟在后面的命令直到遇到双分号为止(;;)case命令以esac作为终止符。
    格式
    	CMD=$1
    case $CMD in
    start)
    	echo "starting"
    	;;
    Stop)
    	echo "stoping"
    	;;
    *)
    	echo "Usage: {start|stop} “
    esac
    

    for

    for循环
    for循环命令用来在一个列表条目中执行有限次数的命令。比如,你可能会在一个姓名列表或文件列表中循环执行同个命令。for命令后紧跟一个自定义变量、一个关键字in和一个字符串列表(可以是变量)。第一次执行for循环时,字符串列表中的第一个字符串会赋值给自定义变量,然后执行循环命令,直到遇到done语句;第二次执行for循环时,会右推字符串列表中的第二个字符串给自定义变量,依次类推,直到字符串列表遍历完。
    

    事例  

    第一种:
    for N in 1 2 3 
    do
    	echo $N
    done
    或
    for N in 1 2 3; do echo $N; done
    或
    for N in {1..3}; do echo $N; done
    第二种:
    for ((i = 0; i <= 5; i++))
    do
    	echo "welcome $i times"
    done
    或
    for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
    练习:计算从1到100的加和。
    

    while

    while命令根据紧跟其后的命令(command)来判断是否执行while循环,当command执行后的返回值(exit status)为0时,则执行while循环语句块,直到遇到done语句,然后再返回到while命令,判断command的返回值,当得打返回值为非0时,则终止while循环。
    

      

      

      

      

     

      

      

      

      

      

      

  • 相关阅读:
    处理ORACLE死锁
    正则表达式 浮点数 整型
    Oracle数据类型number(m,n)
    chm文件打开无法正常显示内容
    安装PHP程序提示“include_path='.;c:php5pear'”错误的解决方法
    mysql数据导入数据报错(数据丢失)
    微信小程序如何与数据库交互?
    Eclipse 常用快捷键
    深入理解BodyTagSupport,包括SKIP_PAGE, EVAL_PAGE等
    JSP自定义标签Taglib实现过程重点总结
  • 原文地址:https://www.cnblogs.com/liushisaonian/p/12016323.html
Copyright © 2011-2022 走看看