【Linux】Shell编程

一、什么是Shell

       在linux系统中shell介于Linux内核与终端用户之间,让用户通过可以shell来操作内核,提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行。

       一个系统可以存在多个shell,不同的shell可能支持的命令语法是不相同的。

      可以通过cat /etc/shells命令查看系统中安装的shell,通过echo $SHELL查看环境变量$SHELL的值,如果在直接在命令行中输入echo $0,则打印的是当前运行的shell名。

二、Shell种类

        操作系统内核与shell是独立的套件,而且都可被替换。不同的操作系统使用不同的shell;同一个内核之上可以使用不同的shell。

  常见的shell分为两大主流:

  ①sh:Bourne shell(sh) ,Solaris,hpux默认shell

        Bourne again shell(bash) ,Linux系统默认shell

  ②csh:C shell(csh)

          tc shell(tcsh)

三、Shell脚本编程

1.一个简单的Shell脚本

    写一个文本以.sh为后缀(扩展名并不影响脚本执行,但见名知意就好)

    在文本内编程:

#!/bin/bash
echo "Hello World !"

     注:#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
            echo 命令用于向窗口输出文本。

     执行脚本:

chmod u+x test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

     或者

bash test.sh    #强制执行,不推荐

2.Shell变量

    变量无需指定类型

    在使用变量时,要在变量名前加上前缀“$”

    赋值时等号两侧不能有空格..

    拼接时为了区分变量,可以用${变量名}

    简单计算:$((算式)),而且小数需要特殊处理(awk或者bc)。

    数组:

arr=(ele1 ele2 ele3...)
echo ${arr[2]} 取指定元素
echo ${arr[*]} 取所有元素
echo ${#arr[*]} 取数组长度

        判断条件(if else):-gt :大于

                                      -lt :小于

                                      -eq :等于

                                      -ne :不等于

                                      -ge :大于等于

                                      -le :小于等于

        语法:

#! /bin/bash
read -p "input age:" age
echo $age
if [ $age -ge 18 ]
then echo 成年
else echo 未成年
fi


if(($age<18))
then echo yes
else echo no
fi


if [ $age -gt 10 ] && [ $age -lt 14 ]
then echo 少年
elif [ $age -ge 14 ] && [ $age -lt 18 ]
then echo 青年
elif [ $age -ge 18 ]
then echo 成年
else echo 儿童
fi

        结果:

         while循环:

#! /bin/bash
num=0
while [ $num -lt 10 ]
do
    echo $num
    num=$((num+1))
done


while (($num<20))
do
    echo $num
    num=$((num+2))
done

         for循环:

#! /bin/bash

for f in `ls`
do
    if test -d $f    #!判断文件存在并且是目录
    then echo ${f}:文件夹
    else echo ${f}:文件
    fi
done

for ((i=0;i<10;i=i+1))
do
    echo $i
    echo "abc" >> a.txt  #! 向文件中追加内容
    echo "123" > b.txt   #!向文件中写入内容,覆盖原有内容
done

         分支语法:

                          case 一个变量 in

                          值1) 语句;;

                          值2) 语句;;

                          esac

#! /bin/bash
read -p "input op:" op

case $op in
"D") echo delete;;
"I") echo input;;
"U") echo update;;
esac

这个语法真的是难记,反人类设计,空格的要求还很严格,(°:з」∠),在这做个浅显的了解就好。

参考链接:://www.cnblogs.com/zhangchao162/p/9614145.html

四、定时任务

        顾名思义,指定某个时间或周期去执行某个任务。 

        通过crontab命令完成,格式如下:(五颗星)

以上各字段还可以使用以后特殊符号:

       星号(*):代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作

       逗号(,):用逗号隔开的值指定一个列表范围,例如“1,3,5,7,9”。

       中杠(-):表示一个整数时间范围,例如“2-6”表示“2,3,4,5,6”。

       正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次,等于“*/2”。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

crontab -l    #!列出当前用户定时任务
crontab -r    #!删除当前用户定时任务
crontab -e    #!添加定时任务

例子:

* * * * * /home/test.sh        #每1分钟执行一次test.sh脚本
10,15 * * * * /home/test.sh    #每小时的第10分钟和第15分钟执行一次test.sh脚本
15 8 * * * /home/test.sh       #每天早上8点15分执行一次test.sh脚本
15 8 1 jan * /home/test.sh     #1月1号的早上8点15分执行一次test.sh脚本
0 6 * * 6 /home/test.sh        #每个星期六的早上6点执行一次test.sh脚本
30 3,12 * * *  /home/test.sh   #每月每天凌晨3点30分和中午12点30分执行test.sh脚本
30 */6 * * *  /home/test.sh    #每月每天每隔6小时的每30分钟执行test.sh脚本
30 8-18/2 * * * /home/test.sh  #每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
30 21 * * *  /home/test.sh     #每月每天晚上21点30分执行test.sh脚本
45 4 1,10,22 * * /home/test.sh #每月1号、10号、22号凌晨4点45分执行test.sh脚本
10 1 * 8 6,0 /home/test.sh     #8月份周一、周日凌晨1点10分执行test.sh脚本
00 */1 * * *  /home/test.sh    #每月每天每小时整点执行test.sh脚本

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值