#得到绝对路径
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. 【转】windows7 修改环境变量 和 用不用重启电脑的讨论

      原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html   先到我的电脑>属性>高级>环境变量 ...

  2. iOS开发~CocoaPods使用详细说明【转】

    一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于 ...

  3. tiny学习3

    这几天在埋头写自己的个星期!而且由于它是基于事件发生的次序(小时就把我的文件导出来了--呵呵.在阅读本文之前,请先看看我Blog里转贴的<TinyXML学习笔记>,相信它能给各位一个关于T ...

  4. 解决GBK字符转UTF-8乱码问题

    通过以下方法将GBK字符转成UTF-8编码格式的byte[]数组 package test; import java.io.UnsupportedEncodingException; public c ...

  5. Spring day02笔记

    spring day01回顾 编写流程(基于xml) 1.导入jar包:4+1 --> beans/core/context/expression | commons-logging 2.编写目 ...

  6. React子组件与父组件传值

    一 子组件向父组件传值 //子组件var Child = React.createClass({ render: function(){ return ( <div> 请输入邮箱:< ...

  7. ORACLE数据库存储结构

    一.数据块 Oracle对数据库数据文件中的存储空间进行管理的单位是数据块.数据块是数据库中最小的(逻辑)数据单位,是最小的I/O单位.与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节.每 ...

  8. 基于percona 5.7的xtrabackup实践

    环境:         centerOS7         percona 5.7         xtrabackup  2.4(5.7只支持2.4已上的版本)   第一步:  安装xtraback ...

  9. file access , argc, argv[ ]

    _____main函数含有 两个参数 ,argc ,argv[] 这两个参数用以指示命令行输入的参数信息. argc 的值是输入的参数的数量.argv是一个数组,每个数组元素指向一个string字符串 ...

  10. 循序渐进Python3(三) -- 1 -- 内置函数

    对函数有了一定了解之后,我们来看看Python的内置函数.下图是Python所有的内置函数,共68个.