一、第一个script

  ① 编写习惯

    1)内容与功能 

    2)版本信息

    3)作者与联络方式

    4)建档日期

    5)历史记录

  ② hello world程序

    #!/bin/bash

    echo -e "Hello World!! \a \n"

    exit 0

  ③ 运行程序

    sh 程序

二、简单实例

  ① 让用户输入值,再输出到屏幕

    read -p “input your firstname” firstname 

    ...

    echo -e "your fullename is : ${firstname} ${lastname}"

  ② 利用data自动创建不同的文档名

    date1=$(date --date='2 days ago' +%Y%m%d)  前两天的日期

  ③ 数值运算

    表达方式1:declare -i total=${firstnu}*${secnu}

    表达方式2:total=$((${firstnu}*${secnu}))

 

三、script的执行方式

  ① sh 程序  直接执行,程序会在子程序bash内执行

  ② source 程序  程序在父程序bash内执行

 

四、test指令的测试功能

  ① test  -e  文件  &&  echo  "存在"  ||  echo  “不存在”  判断文件是否存在及相关属性

    ($?:返回值,正确为0,错误为1)

    -e:该文件是否存在

    -f:该文件是否存在且为 文件(file)

    -d:该文件是否存在且为 目录

    -r:该文件是否存在且具有 可读 权限

    -w:该文件是否存在且具有 可写 权限

    -x:该文件是否存在且具有 可执行 权限

    -u:该文件是否存在且具有 SUID 属性

    -g:该文件是否存在且具有 SGID 属性

    -s:该文件是否存在且为 非空文件

  ②  test  文件1 参数  文件2  比较两个文件

    参数有如下

    -nt:(newer than)判断文件1是否比文件2新

    -ot:(older than)

    -ef:判断两个文件是否为同一个文件,可用在判断hardlink上,是否都指向同一个inode上。

  ③  test  数值1  参数  数值2  判断两个整数

    参数有如下

    -eq:相等(equal)

    -ne:不等(not equal)

    -gt:大于(greater than)

    -lt:小于(less than)

    -ge:大于等于

    -le:小于等于

  ④  判定字符串的数据

    test  -z  string:判定字符串是否为空,若为空,则为true

    test  -n  string:判定字符串是否为非空,若为空,则为false

    test  str1 ==  str2:判定两个字符串相等,若相等,则为true

    test  str1 !=  str2: 判定两个字符串不相等,若相等,则为false

  ⑤  多重条件判定

    test  -r  文件  -a  -x  文件

    -a:and

    -o:or

    !:反向状态

 

五、判断符号:[ ]  跟test一样的用法

    [  "$home"  ==  "$samll"  ]  判断两个变量是否相同,每个组件都需要有空格键分隔,变量要用 双引号 括起来

 

六、shell script的默认变数($0,$1...)

    ① script的特殊变量如下

      $#:代表后接的参数 个数,返回值如 4(个)

      $@:代表[ "$1" "$2" "$3" "$4" ],每个变量是独立的

      $*:代表[ "$1n$2n$3n$4" ],n为分隔符,默认空格键

        $0:执行的脚本档名,$1:第1个参数,$2:第2个参数

    ② 栗子:直接在执行命令后面带上参数

      1) sh  文件  参数1  参数2  参数3

      2) 脚本内容:

          echo  "脚本名称是:${0}"  

          echo  "有几个参数:$#"

          echo  "参数内容是:$@"

          echo  "第1个参数是:${1}"

          echo  "第2个参数是:${2}"

七、参数变量号码偏移(想左移除) shift

    shift [n]  n是数字,可以一次移除几个参数

 

八、条件判断式

    ① if  [ 条件判断式 一] ; then

        执行的代码

        elif  [条件判断式二] ; then

        执行的代码

        else

        执行的代码

        fi

 

九、case ...in...esac判断语句   

      case  $变量  in

        "第一个变量内容"

          执行码

          ;;

        "第二个变量内容"

          执行码

          ;;

        *

          执行码

          ;;

      esac

 

十、function(函数)

    function  函数名(){

      执行代码

    }

 

十一、loop 循环

  ①不定循环

    while [ 判断式 ]

    do

      执行代码

    done

      当满足条件时循环

    until [判断式]

    do

      执行代码

    done

      当满足条件时终止循环

  ②固定循环

    for  变量名  in  变量值1  变量值2  变量值3 ...

    do

      执行代码

    done

      第一次循环时,变量名的内容为变量值1 。。。

  ③固定循环。 for的另一种写法

    for (( 初始值;限制值;执行步阶 ))  (( i=1;i<=100;i=i+1 ))

    do

      执行代码

    done

  的

 

十二、shell script的追踪与debug

  sh  [-nvx]  scripts.sh

    -n:不要执行script,仅查询语法的问题

    -v:再执行script前,先将scripts的内容输出到屏幕上

    -x:将使用到的script内容显示到屏幕上。

 

十三:示例

  参考资料1:https://www.cnblogs.com/luoahong/articles/8456203.html

  常用shell脚本:https://www.cnblogs.com/ysgcs/p/9938832.html

 

十四:自己编写的shell

  1、当前用户的角色和目录路径

#!/bin/bash
#kentee
#2020/5/5
#实现自动显示使用者的身份和所在目录

echo -e "您目前的身份是:$(whoami)"

echo -e "您目前所在的目录是:$(pwd)"

echo -e "现在的日期是:$(date +%m%d)"
View Code

 

  2、让用户输入生日,计算出生日是否已过

ntee
#2020/5/5
#让用户输入自己的生日(月日),计算出用户的生日还有几天。

read -p "请输入您的生日(几月几日,如:0722):" bir
now=`date +%m%d`

bir=10#${bir}
now=10#${now}

if((${bir}==${now}));then
        echo -e "今天是您的生日!祝您生日快乐!!!"
elif ((${bir}<${now}));then
        echo -e "您的生日已经过了哦!祝您新的一年顺顺利利!!!"
else
        echo -e "您的生日即将到来,好好期待下哦!!!"
fi
~         
View Code

 

 十五:

  1、crontab 定时任务

    参考资料:https://www.cnblogs.com/ftl1012/p/crontab.html