#得到绝对路径
DIR=$(cd `dirname $0`;pwd)
$DIR/file.txt
#去掉#注释
egrep -v "(#|^$)" /etc/zabbix/zabbix_server.conf
 
基本语法:
  • export 变量=变量值    声明全局变量
  • unset $变量名  清空变量
  • read  -p "真的卸载?(yes|no)"  flag
  • 使用 read [-p "提示信息" ] 变量名 声明交互变量
  • 常见环境变量$USER $LOGNAME $UID $SHELL $HOME $PWD $PATH $PS1 $PS2
  • $n (n在1-9之间)位置变量
  • 预定义变量:

$#传递到当前脚本的参数的总个数,
                     $*以一个单字符串显示所有向脚本传递的参数,
                     $?上一条指令执行后返回的状态,
                     $$当前所在进程的进程号,$!后台运行的最后一个进程,
                     $0当前执行的进程程序名

  • 条件判定:
                    &&成功执行一个命令,再执行下一个命令    modprobe ppp-compress-18 && echo success
                    ||一个命令执行失败后再执行下一个命令
                    ()在一个子shell里执行的一组命令     {}在当前shell里执行一组命令,修改变量值立即起效
  • 多种括号的使用
                    ((  ))多用于计算表达式    [[   ]]  语法最兼容,逻辑判断    ()   优先级最高    [   ]  逻辑判断,兼容性不高
  • 运算    加`expr $1 + 2` 减  `expr $1 -2 `  除`expr $1 / 2`
  • 常用文件判定
        -e文件存在               -f 文件是个普通文件        -s 文件大小不为零
        -d 文件是一个目录     -b 文件是一个块设备              -c 文件是一个字符设备
         -p 文件是一个管道       -h|-L 文件是一个符号链接       -s 文件是一个socket
         -t 文件与一个终端设备相关     -r 文件是否可读           -w 文件是否可写             -x 文件是否可执行
        f1 -nt f2 文件f1比f2新    f1 -ot f2 文件f1比f2旧    f1 –ef f2 文件f1与f2是相同文件的硬链接
  • 字符串判定
            -z 字符串为null          -n 字符串不为null
  • 数值判定
            -eq 等于     –ne不等于     –gt大于 
            –ge大于等于    –lt 小于         –le 小于等于 
  • 常用判定符
            =  != 可在[ ]中使用
            <  <=  >=  > 可在双括号内 [[ ]] 使用
  • 逻辑判定
            -a 逻辑与    -o 逻辑或
 
条件判断if
 if [ $# = 0 ] ;then           // [ =  ]间有空格, then前有;号
    ...
elif [  $a -lt 3 ];then
...
fi
多条件判断
    if [ -n $port1 ] && [ -n $port2 ] && [ -n $port3 ] && [ -n $port4 ] && [ -n $port5 ];then
    if [ -n $port1 ] || [ -n $port2 ] || [ -n $port3 ] || [ -n $port4 ] || [ -n $port5 ];then
注意:如果if 的条件中包含字符串变量变量,请注意使用“”,如:if [ -z "$test" ];then
 
条件判断case
case  $letter   in
  U|u) whoami ; ;
  L|l) ls –l / ; ;
  E|e)exit ;;
  *) echo “please input true parm!!!” ; ;
esac
 for 循环
 (使用return  0或1来退出循环)
格式1:
  int j=0
   for i in $arr   //$arr为链表
   do
    echo "第$j次循环"
    j=`expr $j + 1`
   done
格式2:
    for (( i = 0; i < $len ; i++ )) ; do
        echo "第$i次循环"
    done
 
 while循环
(使用return  0或1来退出循环)
格式:
  While [ $num  –lt  10  ]
  Do 
  Done
 
sample1:
    while [ $# -ne 2 ]
    do
        echo "输出$#"
        sleep 1            //休息1s
        if [ $i -eq 100 ]
        then
        break //退出
        fi
        shift
    done
 
until循环
 (使用return  0或1来退出循环)
  Util [ $num –lt 10 ]
  Do
  Done
 
数组
声明
array[key]=value #array[0]=one,array[1]=two
declare -a array   #array被当作数组名
array=( value1 value2 value3 ... )
array=( [1]=one [2]=two [3]=three )
array="one two three" # echo ${array[0|@|*]}  把array变量当作数组来处理,但数组元素只有字符串元素本身
访问
${array[key]}  #${array[1]}
${array[@|*]}    #输出所有元素
${array[@]:1}    #从第二(1+1)个元素开始,后面所有的元素
${array[@]:0:2} #从第一(0+1)个元素开始的两个元素
${array[@]:1:3}  #从第二个元素开始的三个元素
${#array}       #计算数组第一个元素的长度
${#array[0]}    #同上
${#array[*}}     #计算数组的个数
${#array[@]}     #同上
删除
unset array[1]  #删除数组中的第一个元素
unset array #删除整个数组
${array[@]#t*e} #删除字符串左边开始最短的匹配t*e
${array[@]##t*e} #删除字符串左边开始最长的匹配t*e
${array[@]%o}   #删除字符串右边开始最短的匹配
${array[@]%%o}   #删除字符串右边开始最长的匹配
字串替换
${array[@] /o/m} #数组中所有的o都会被替换为m
${array[@] /o/}    #所有匹配到的o都会被删除
${array[@] /#o/m}  #数组已o开头的匹配将会被替换
${array[@] /%o/m}  #数组已o结尾的匹配将会被替换
sample排序
bak_date_ns=(`cat $tmpfile1|awk -F "." '{print $1}'`)   //排序前
bak_date=($(for val in "${bak_date_ns[@]}"  //排序后
        do
          echo "$val"
        done|sort)
       )
 
函数
使用函数的好处:可以将一组功能打包,在同一shell中,多次调用。
函数的声明
function chk_clientip() #检验client_ip参数
{
         if_net_well=0
         cle_ip=$1
         client_ip=$2
         server_ip=$3
         if [ -n "$cle_ip" ]  &&  [ -n "$client_ip" ] && [ -n "$server_ip" ];then
    if_net_well=1
         fi
        return $if_net_well
}
函数的调用
chk_clientip $cle_ip $client_ip $server_ip
result=$?    //函数执行结果,返回的$if_net_well 的值
 
正则表达式:
ip地址 [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$

shell语法快速入门(1)的更多相关文章

  1. Objective-C基础语法快速入门

    Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...

  2. Less 语法快速入门

    Less 语法快速入门 Less 是一门 CSS 预处理语言其可以运行在 Node 或浏览器端. 它将传统的 css 样式结构单一的排版顺序进行了优化,让我们可以通过层级嵌套的方式将 css 类名与H ...

  3. Shell脚本快速入门

    最近看了下Shell脚本.曾经遇到很多现成的工具包里边就多次用到了Shell脚本.总之这东西的作用无非就是将一系列的操作进行整合. ·整合后使得一套工作更加模块化规范化. ·批量处理要比手动操作快得多 ...

  4. shell脚本快速入门----shell基本语法总结

    1.#!脚本的开头 #!/bin/bash 2.脚本属性 添加可执行属性,chmod +x 或使用"."运行,例如运行当前目录下的a.sh 可执行命令 ". ./a.sh ...

  5. Shell基础快速入门 了解shell运行原理

    Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界 ...

  6. python语法快速入门(1)

    http://www.runoob.com/python/python-tutorial.html Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言 ...

  7. T4语法快速入门

    1.什么是T4? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit.T4(Text Template Transformation Toolk ...

  8. Ruby 语法快速入门

    作用域:指的是类,模块,方法 常量:无需指定类型,全大写 FANS = 100 puts "We have" + FANS.to_s + "fans" 变量 局 ...

  9. XML随笔:语法快速入门及当下流行的RSS简析

    今天是本人第一次写博客,之前闭门造车闹出过很多笑话,恰巧这几天刚刚重温了一遍XML的知识,决定把XML的知识再来从头到尾的理一遍,感触颇多,今天分享给大家.希望大家能多多注意其中的要点. 1.定义 首 ...

随机推荐

  1. javascript里for循环的一些事情

    今天在给一个学妹调她的代码BUG时,她的问题就是在一个for循环里不清楚流程的具体流向,所以导致了页面怎么调都是有问题,嗯确实你如果不清楚语句流向很轻易就会出问题,所以说for循环不会用或者说用的不恰 ...

  2. 10. Max Points on a Line

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  3. [Appium] 使用Appium过程中遇到的各种坑

    以下问题都是以ios为背景: 1. 问题: Case: 在页面S1上,点击元素A后,判读B元素是否出现. Detail:一开始通过Appium Inspector, 可以找到B元素,所以直接取该元素的 ...

  4. Android BaseAdapter的使用

    数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter. 首先说一下什么是适配器,这里我从网上找到一幅图片 由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁.由它把数据绑 ...

  5. Angularjs-Dirty Checking

    Angularjs实现了数据双向绑定,就像下面这样: <!doctype html> <htnl ng-app> <head> <script src=&qu ...

  6. go特性学习

    而后我写了一些测试代码: dept1 :=     Dept{         name:     "MySohu",         building: "Intern ...

  7. Angular $http解析通过接口获得的json数据

    刚接触angular不久,对很多东西都不了解,今天需要用angular通过接口得到json数据,折腾了好久,总算是能获取到数据了,下面是部分源码,仅供参考: HTML部分: <body ng-a ...

  8. 1.No MBR错误

    如果提示如下错误: Error: No MBR is found at SD/MMC.                                              Hint: use f ...

  9. 使用Form Builder创建Form具体步骤

    使用Oracle Form Builder创建Form具体步骤 (Data Source为Table) 说明:当Block使用的Data Source为Table时,Form会自动Insert,Upd ...

  10. dubbo+zookeeper例子

    0.原理   Alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个 ...