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

    一:变量

    命名规则:

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    变量使用:

         $your_name

         ${your_name}

         "My name is ${your_name}"

    推荐给所有变量加上花括号,这是一个人好的编程习惯。

    只读变量:

         myurl="my name is kenny"

         readonly  myurl

        再去给变量赋值是不可实现的

    删除变量:

        uset myurl   #此时变量已经被删除

    shell变量:

        环境变量,局部变量,shell变量    

    Shell字符串:

      1:单引号和双引号区别

                 单引号中不能出现单引号,用转义字符转义也不行,双引号可以

                 单引号中不能出现变量,双引号可以

           2:拼接字符串

                 $aa$bb

           3.获取字符串长度

                 str=“asfgsdfg”

          echo ${#str}   会输出字符串长度

           4.提取字符串

                 echo ${str:1:6}   #会输出di第2到7位

           5.查找字符串位置

                  echo `expr index "$str" f`   #输出字符串f在字符串中的位置

     二:参数传递

      1.$n        传递参数

      2.$#        传递参数个数

      3.$*        以一个单字符串显示所有向脚本传递的参数

      4.$@     $*相同,但是使用时加引号,并在引号中返回每个参数。

      5.$$      脚本运行的当前进程ID号

           6.$!       后台运行的最后一个进程的ID号

           7.$?     表示上一条命令的返回值

      8.$0     Shell本身的文件名

      9.$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…

           

    三:数组

      规则:

                 1:shell只支持一维数组,不支持多维

                 2:shell数组用括号括起来表示,元素之间用空格隔开

                 my_array=(A B C D)

     输出:
    echo “${my_array[0]}”
    获取所有数组元素:
         echo "数组的元素为: ${my_array[*]}"
         echo "数组的元素为: ${my_array[@]}"
     获取数组长度:
         echo "数组的元素为: ${#my_array[*]}"
         echo "数组的元素为: ${#my_array[@]}"
     注意事项:
    1:数组元素可以为变量
         my_array=($A B C D)

    四:运算符

          shell中运算符分为6种:

      1:算术运算符

      2:关系运算符

      3:布尔运算符

      4:字符串运算符

      5:文件测试运算符

      详解:

      1:算术运算符

                val='exper   2 + 2'     #输出为4

               注意2 + 2之间运算符和数字之间一定要有空格,否则会按字符串输出

         

      2:关系运算符

          

      3:布尔运算符

         

      4:逻辑运算符

        

      5:字符串运算符

        

      6:文件测试运算符

         

    二:echo

      1:显示转义字符

                echo "" myname    ""

      2:显示变量

        echo "$name It is a test"

      3:换行

              cheo "hello word  "

      4:不换行

      echo -e "OK! c" # -e 开启转义 c 不换行
      echo "It is a test"

      5:显示结果重定向

         echo "It is a test" > myfile

    三:流程控制

         if...else

    if [ $exitstatus = 0 ]; then
       if [ ! $PET ]; then
      	echo "you have not input a word!"
        else
            echo $PTION 
            if [ $PTION = 1 ]; then
               echo "Your ip is:" $PET
               echo -e "
    #" $PET  "
    0.0.0.0 10${PET} 172.17.17.${PET} 3389">>/root/aa.sh
            else  
          	   echo "Your ip is:" $PET
          	   echo -e "
    #" $PET  "
    0.0.0.0 10${PET} 172.17.17.${PET} 22">>/root/aa.sh
          	   echo -e             "0.0.0.0 20${PET} 172.17.17.${PET} 80">>/root/aa.sh
          	   echo -e             "0.0.0.0 30${PET} 172.17.17.${PET} 9091">>/root/aa.sh
            fi  
       fi
    else
        echo "You chose Cancel."
    fi
    

      for

    for loop in 1 2 3 4 5
    do
        echo "The value is: $loop"
    done
    

      while

    int=1
    while(( $int<=5 ))
    do
        echo $int
        let "int++"
    done
    

      

         until

         case

        

    case "$1" in
       -c)
            BackupControllerConfig
        ;;
       -p)
            BackupComputeConfig
        ;;
       -rc)
            RestoreControllerConfig
        ;;
       -rp)
            RestoreComputeConfig
        ;;
       -ri)
            RintedConfig
        ;;
       *)  
            Openstack_help
        exit 0
    esac
    

      

         break

         break命令允许跳出所有循环(终止执行后面的所有循环)。

         continue

         continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

    其他:

       shell脚本中获取当前路径

    $(cd `dirname $0`; pwd)
    

     -E表示一旦出错,就退出当前的shell。

    bash -E /root/1.sh
    

     $? 上个命令的退出状态,或函数的返回值。

    -ne 是不等于
    check_exit(){
        if [ $? -ne 0 ]; then
            echo -e "33[41;37m[Error]: have a error 33[0m"
            exit 1
        fi
    }

     解压安装包到/opt/目录下

    tar -zxf ./packages/s3_bs_install.2* -C /opt/
    

      当前bash环境下读取并执行FileName中的命令

    source ./config/deploy-config
    

      允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

           对获取的字符串进行排序排重

    $(echo ${all_ips_old} | awk '{for(i =1; i <=NF; i++){ if($i~/[0-9].[0-9]/) print $i  }}'|sort -u)
    

      1:export  使变量为全局变量

            2:使用加-o StrictHostKeyChecking=no参数,SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查

    export autossh="ssh -i ${ssh_private_key} -o StrictHostKeyChecking=no"
    #-q: 不显示传输进度条 export autoscp="scp -i ${ssh_private_key} -o StrictHostKeyChecking=no -q"

      

  • 相关阅读:
    GDAL GDALOpen 打开中文路径的问题
    (转载)星载SAR产品数据格式的介绍
    Qt 标题栏(标题、图标)设置
    android NDK与Cygwin配置
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习7.通知)
    使用的Eclipise插件汇总
    android对话框弹出方式动画
    常用系统优化软件下载
    FLV 观看方法和视频文件转换攻略
    网络编辑如何应用SEO知识
  • 原文地址:https://www.cnblogs.com/yaohong/p/7500698.html
Copyright © 2011-2022 走看看