shell操作linux的桥梁

       创建:

              后缀为.sh的文件

       编写:

              头部注释为#!/bin/sh或者#!/bin/bash(注释可写可不写,建议写上)

       运行:

              1.通过sh命令执行

                     例如:sh helloworld.sh

              2.通过bash命令执行

                     例如:bash helloworld.sh

              3.通过把文件修改为可执行的文件然后通过./文件命令.sh来执行

                     例如:./helloworld.sh(必须在当前目录下)

 

变量(动态数据类型,没有数据类型的限制,并且必须初始化)

       定义和初始化

              格式

                     变量名称=值

              例如:

                     x=10 "abc edefg"

              注意:

                     等号两边不能有空格

       使用:通过$区分变量还是一句话

              格式1:

                     $变量

              格式2:

                     ${变量}

              注意:

                     格式1,会把$后所有相连内容看做一个变量

                     格式2,${}表示值引用{}之中的内容分,对相连的内容做了一个区分

 

$0...$n:表示接收外部参数(执行脚本时,传递的参数)

       格式:

              $下标

       注意:

              $0永远表示脚本名称(所以脚本名称不算数,$0也不算第一个参数)    

              下标大于一位数只能使用${}获取参数,因为$下标只把第一位数据看做下标

              $*获取所有参数

              $#获取所有参数个数        

 

引号:

       单引号:安原字符串输出

       双引号:可以引用变量,拥有特殊含义的内容

 

       拼接:连续获取变量

       注意:

              如果有多个引号,连续的形成一对

              引号中使用其他引号,其他引号做字符串使用

 

字符串

       获取长度

              格式:

                     ${#变量}

       截取:

              格式:

                     ${变量:开始位置:长度}

              注意:

                     ${str::5}:从0获取5个

                     ${str:0}:从0获取到末尾

       替换单个

              格式:

                     ${变量/旧/新}

              注意:从左向右替换第一个

       替换所有

              格式:

                     ${变量//旧/新}

       注意:替换不会再原字符上进行修改,想要修改原字符串只能从新赋值

 

       删除

              从头开始删除

                     ${变量#表达式}:匹配第一个删除

                     ${变量##表达式}:匹配最后一个删除

              从尾开始删除

                     ${变量%表达式}:匹配第一个删除

                     ${变量%%表达式}:匹配最后一个删除

              注意:从未开始删除,表达式还是从左向右去写

                     删除不会再原字符上进行修改,想要修改原字符串只能从新赋值

                    

运算符

       算术运算符

              bash不支持简单的数学运算,可以通过命令实现expr

              格式1:

                     `expr 值 + 值`

                     注意:符号两边需要加上空格

              格式2:

                     $[值+值]

 

       比较运算符: > < >= <=....

              格式:

                     $[值符号值](符号两边空格加不加无所谓)

              注意:比较的结果用1(true)和0(false)表示

 

       逻辑运算符: &/and |/or !/not

              例如:

                     #判断2>1结果

                     echo $[2 > 1]

                     #反转2>1结果

                     echo $[!$[2>1]]

                     #  反转后面的结果2>1 and 2>3  false0

                     echo $[!$[$[2>1]&$[2>3]]]

                     echo $[2>1 & 2<1]

if

       格式1:

              if 判断条件

              then

                     判断为true执行的代码

              fi

       格式2:

              if 判断条件

              then

                     判断为true执行的代码

              else

                     判断为false执行的代码

              fi

       格式3:

              if 判断条件

              then

                     判断为true执行的代码

              elif 判断条件

              then

                     判断为true执行的代码

                     。。。

              else

                     判断为false执行的代码

              fi

              注意:else可加可不加

判断条件的写法

       []:[]两边加空格,符号两边加空格并且符号前加转义符

              可以使用字母

       [[]]:[[]]两边加空格,符号两边加空格

              可以使用字母

       ():弃用

       (()):不需要加空格,但是不能使用字母

              在使用变量时,不需要使用$

 

for

       java格式:

              for ((初始化变量;判断条件;控制语句))     

              do

                     执行语句

              done     

       python格式:

              for 变量 in 结果集

              do

                     执行语句

              done

       结果集:

              {开始..结束}含头含尾,不能引用变量

              `seq 开始 结束`含头含尾

例如:获取1-100的奇数和偶数和

       jsum=0

       osum=0

       for i in {1..100}

       do

               if ((${i}%2==0))

               then

                       #osum+=${i} 结果做了拼接 不是算术运算

                       #osum=`expr ${i} + ${osum}`

                       #osum=$[${i}+${osum}]

                       let osum+=i

 

               else

                       let jsum+=i

               fi

       done

       echo 偶数和为:${osum}

       echo 奇数和为:${jsum}

       注意:

              使用let在计算时可以直接使用变量

 

数组:存储多个元素,数据类型可以不同,元素元素之间以空格切分

       操作

              通过下标获取数据

                     格式:

                            ${数组[下标]}

                     注意:

                            直接引用数组变量,默认获取下标为0的元素

                            下标使用*表示获取所有

              获取长度:

                     格式:

                            ${#数组[*]}

 

read:键盘录入

       格式:

              read 变量1 变量2 ...变量n

       注意:

              键盘录入时,允许给多个变量进行赋值,值和值之间以空格切分    

 

打印三角形

       for i in {1..5}

       do

               for j in `seq 1 ${i}`

               do

                       echo -n "* "

               done

               echo ""

       done

 

函数

       格式:

       function 方法名(){

              方法体

              return 数字;

       }

       注意:function和return可加可不加

              $0...$n表示接收参数,$0永远是脚本名称(忽略)

              方法的调用直接使用方法名不加()

              return只能返回数字范围在0-255之间

              $?接收返回值只能接收一次

 

获取当前日期时间

       ate +"%Y-%m-%d %H:%M:%S"

 

格式化日期时间:

       date -d today +"%Y-%m-%d %H:%M:%S"

 

加减日期时间

       date +%Y%m%d        //显示前天年月日

       date +%Y%m%d --date="+1 day"  //显示前一天的日期

       date +%Y%m%d --date="-1 day"  //显示后一天的日期

       date +%Y%m%d --date="-1 month"  //显示上一月的日期

       date +%Y%m%d --date="+1 month"  //显示下一月的日期

       date +%Y%m%d --date="-1 year"  //显示前一年的日期

       date +%Y%m%d --date="+1 year"  //显示下一年的日期

 

重定向:执行命令的结果写写入到文件

      

       标准输入文件(stdin):stdin的文件描述符为0,默认从stdin读取数据。

       标准输出文件(stdout):stdout 的文件描述符为1,默认向stdout输出数据。

       标准错误文件(stderr):stderr的文件描述符为2,向stderr流中写入错误信息。

 

       使用>,>>默认是把正确信息写入文件

       想要把错误信息和正确信息写入文件需要后面追加2>&1(把错误信息当做正确信息去处理)

 

定时器:

       格式:

              *(分钟) *(小时) *(星期) *(几号) *(月份) commend

 

       通过crontab -e添加定时任务

       查看定时任务是否执行了,看日志tail -f /var/log/cron

       注意:

              定时器或脚本中涉及到路劲的全部给绝对路劲

 

       * * * * *         每分钟

       */1 * * * *      每分钟

       0 */1 * * *             每小时