zoukankan      html  css  js  c++  java
  • SHELL脚本的常规命令

    **shell脚本的执行方式:

               方法一:首先赋予x权限,再输入相对路径或绝对路径,./testdot.sh或/root/shell/testdot.sh

               方法二:sh testdot.sh(会新开一个bash,不同bash中的变量无法共享)

               方法三:. ./testdot.sh(不会新开bash)

    **单引号与双引号:单引号屏蔽一切特殊符号,双引号可以屏蔽空格但无法屏蔽引用变量

    **获取紫铜所有的变量:set

    **获取内核进程的结构树:pstree

    **获取用户的主目录:echo $HOME

    **获取当前脚本运行所在目录:echo $PWD

    **获取当前脚本所用的解释器:echo $SHELL

    **获取当前脚本的用户:echo $USER

    **设置全局环境变量:export 变量名

    **解除变量:unset 变量名

    **设置静态变量:readonly 变量名=1(一般不用)

    **查询某条命令的用法:某命令 --help

    **变量赋值给另一变量:x=`ls`(或者x=$(ls))

    **获取上一个命令退出的状态或函数的返回值:$?

    **获取当前进程的编号:$$

    **获取当前脚本的名称:$0

    **获取输入的第n个参数:$n(n>=1)

    **获取脚本参数的个数常用于循环:$#

    **获取脚本的所有参数:$*($@)  PS:$*加了引号会变,而$@加了引号不会变还是一个个的变量输出

    **使用脚本写出(2+3)*4:第一种写法:expr $(((2+3)*4)) 或者 echo $(((2+3)*4))

                第二种写法:S=`expr 2 + 3`  expr $S * 4

    **在SHELL语言中:export a=1;表示定义的变量,会对自己所在的SHELL进程机器子进程生效

             a=1;表示定义的变量,只对自己所在的SHELL进程生效

             在s.sh中定义的变量,在当前登陆的SHELL进程中

    ** for 循环的两种写法:

    for p in $*
    do
    echo $p
    done

    ---------------

    for ((i = 0; i <= n; i++))
    do
    echo "第 $i 次"
    done

    ** while 循环的两种写法:

    while expression
    do
    command
    done

    ---------------

    i=1
    while ((i<=3))
    do
     echo $i
     let i++
    done

    ** case 语句的写法:     

    case $1 in
    start)
    echo "starting"
    ;;
    stop)
    echo "stoping"
    ;;
    *)
    echo "Usage: {start|stop} “
    esac

    ** read 的用法:read -p "提示语句" Var(read -p "please input your name: " NAME  echo $NAME)

             read -n "字符个数" Var

             read -t "等待时间" Var

    ** if 语句的用法:

    #!/bin/bash
    read -p "please input your name:" NAME
    #printf '%s ' $NAME
    if [ $NAME = root ]
    then
    echo "hello ${NAME}, welcome !"
    elif [ $NAME = itcast ]
    then
    echo "hello ${NAME}, welcome !"
    else
    echo "get out here !"
    fi

    PS:注意[  ]内部前后加空格,[  ]返回false-1。

    **判断语句:

          [ condition ] && echo OK || echo NOTOK,条件满足,执行OK,不满足执行NOTOK。(A?B:C)

    **常用的判断条件:

            = 字符串比较
            -lt 小于
            -le 小于等于
            -eq 等于
            -gt 大于
            -ge 大于等于
            -ne 不等于

            -r 有读的权限
            -w 有写的权限
            -x 有执行的权限
            -f 文件存在并且是一个常规的文件
            -s 文件存在且不为空
            -d 文件存在并是一个目录
            -b文件存在并且是一个块设备
            -L 文件存在并且是一个链接

    **SHELL自定义函数:

    语法:

    function funname()
    {
    action;
    [return int;]
    }
    For example:function start() / function start / start()

    小例子:

    ----------------------------

    #!/bin/bash
    fSum()
    {
    echo $1,$2
    return $(($1+$2))
    }
    total=$?
    echo "第一次点调用后返回的结果: "$total
    fSum 5 7
    total=$?
    echo $total,$?

    PS:妈呀,由于本人愚钝,花了1个小时才找到了代码的问题所在,原来是直接粘过去的代码在SHELL语言

       里不能加Tab键呐!!!之前怎么跑都不好使,只是显示echo: command not found报错,网上查

       了N种可能也都不行,于是一行行的找毛病,终于发现了问题所在。之后对其进行了一番试验,为

       啥空格加在echo之前好使,而Tab键加在之前就不好使了呢?为啥直接在SHELL里编辑加了Tab键却

       好使呢?哎,还是我太嫩了,一点点的积累经验吧。

    -------------------------

    #!/bin/bash
    demoFunction(){
    echo "This is my demo shell function!"
    }
    echo "Function is begining..."
    demoFunction
    echo "Function is ending!"

    ---------------------------

    #!/bin/bash
    funSum(){
    echo "Sum of two numbers..."
    echo -n "Input a number: "
    read Num1
    echo -n "Input another number: "
    read Num2
    echo "The two numbers are $Num1 and $Num2 !"
    return $(($Num1+$Num2))
    }
    funSum
    echo "The sum of two numbers is $? !"

     **脚本调试:

          第一种:sh -vx test.sh

          第二种:set -x (在脚本中增加)

  • 相关阅读:
    调用百度地图API添加点聚合时,marker标注的label标签刷新丢失问题
    redis--基本命令
    centos8安装redis6.0.5
    centos8更改镜像源
    centos8重启网络服务
    搭建eureka高可用
    html5图片缩放后上传blob
    mysql主从复制
    zTree
    datetimepicker使用总结
  • 原文地址:https://www.cnblogs.com/ALittleMoreLove/p/7744697.html
Copyright © 2011-2022 走看看