ubant每30秒运行shell脚本_shell 脚本(Linux--ubuntu)

介绍

1. Shell介绍

(1)shell是一种命令语言,也是一个用 C 语言编写的程序 (命令解释器->“翻译官”)

(2)作用:主要提供一个接口使用户与内核交互操作。

(3)流程:接收用户输入的命令并且进行解析,然后将命令送入内核去执行 -> 最后将结果返回给用户。

2.Shell常见类型

名称

来源

比较

sh (Bourne Shell)

AT&T Bell实验室的Steve Bourne开发

最早

csh (C Shell)

加州伯克利大学的Bill Joy

更强

ksh (Korn Shell)

AT&T Bell实验室的David Korn开发

升级

bash(Bourne Again Shell)

自由软件基金会(GNU)开发的一个Shell

统一

查看shell指令

查看当前系统支持的shell类型:

cat /etc/shells

查看当前使用的shell类型:

echo $SHELL

3.Bash介绍

3.1 bash功能(内部命令和外部命令)

3.2 bash 语法

脚本文件创建及运行

(a)穿件bash文件:

vi 文件名.sh 或者 vi 文件名

(b) 在文件名头部申明

#!/bin/bash

代码段

(c)运行:

chmod a+x 路径及文件名.sh // 修改文件权限---可执行

方法1: sh 路径及文件名.sh(推荐)

方法2: /bin/bash 路径及文件名.sh (文件中可省去申明,但是必须在/bin/bash 路径下)

方法3: source 路径及文件名.sh

方法4: . 路径及文件名.sh

示例: 创建test.sh脚本并输出hello world

文件或者目录权限修改

名称

语法

更改拥有者(change own)

chown -R 拥有者待更改的文件

更改所属组(change group

chgrp -R 所属组待更改的文件

更改权限(change mode)

chmod -R ABC 待更改的文件

更改权限(change mode)

chmod -R ,...,待更改的文件

ABC分别代表(拥有者、所属组、其他组)

augo分别代表(所有用户,拥有者、所属组用户、其他组用户)

权限范围:+ 追加、- 移除、= 修改

数字表示(1-执行,2-可写,3-可写可执行,4-可读,5-可读可执行,6-可读可写,7可读可写可执行)

目录或文件授权rwx作用

代表字母

权限

文件含义

目录含义

r

读权限

查看文件内容

列出目录内容 (ls 指令)

w

写权限

修改文件

目录中创建删除文件

x

执行权限

可以执行文件

可以进入目录(cd指令)

4.shell 变量

4.1 本地变量

概念:

只对当前shell进程有效(ps. 对当前进程的子进程和其它shell进程无效)

语法:

设置:变量名=变量值(等号不能有空格)

删除:unset 变量名

输出:echo $变量名

示例代码:

like@ubuntu:~$ test=1 --创建变量

like@ubuntu:~$ echo $test --打印变量

1

like@ubuntu:~$ unset test -- 删除变量

like@ubuntu:~$ echo $test

like@ubuntu:~$

4.2 环境变量

概念:

环境变量名词,效果执行一个命令会去“环境变量”设置的目录中挨个找该命令的可执行程序(1-找到了直接执行,2-找不到则报错)

语法:

export 变量名=变量值

注:

1.当环境变量在/etc/profile 中申明后, 对所有用户都有效.

2.在家目录中的.bashrc 中申明后, 对当前用户都有效

3.需要执行source /etc/profile 或者重启shell 窗口才能生效

4.3 局部变量

概念:

函数中申明的变量,函数调用时创建、调用完毕时销毁

语法:

local 变量名=变量值

示例代码:

like@ubuntu:~$ function ab(){

> local a=10

> echo $a

> }

like@ubuntu:~$ ab

10

like@ubuntu:~$ echo $a. --函数调用完毕后, 变量释放

like@ubuntu:~$

4.4 位置变量

概念:

指程序运行时动态传入参数

语法:

sh 路径及文件名 参数1 ... 参数n

echo $1 / .. / echo $n

示例代码:

like@ubuntu:~$ vim test1.sh

like@ubuntu:~$ cat test1.sh

#!/bin/bash

echo $1

echo $2

like@ubuntu:~$ sh test1.sh 10 20 --- 将10 ,20 传值给第一个参数和第二个参数

10

20

4.5 特殊变量

概念:

系统定义的特殊含义的变量(预定义变量)

变量

含义

$0

当前脚本的文件名

$n

传递给脚本或函数的参数。n 表示第几个参数。例如,第一个参数是$1

$#

传递给脚本或函数的参数个数。

$*

传递给脚本或函数的所有参数。

$@

传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。

$?

上个命令的退出状态,或函数的返回值。

$$

当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

4.6 文件通配符

符号

含义

*

匹配0个或多个任意字符

?

匹配一个任意字符

[若干字符]

匹配中括号中的一个字符

示例:

匹配5结尾的.doc文件 (ls 5.doc)

匹配a开头的.doc文件 (ls a.doc)

匹配第二个字符是a或1的.doc文件 (ls ?[1a]*.doc)

4.7 命令代换

概念:

通过语法反引号或$(名称)实现先解析shell指令,再赋值给变量

示例代码:

like@ubuntu:~$ date

2018年 10月 29日 星期一 20:47:26 CST

like@ubuntu:~$ a1=$(date)

like@ubuntu:~$ echo $a1

2018年 10月 29日 星期一 20:47:53 CST

like@ubuntu:~$ a2=`date`

like@ubuntu:~$ echo $a2

2018年 10月 29日 星期一 20:48:14 CST

4.9 算数代换

概念:

通过

[]实现运算功能。

注: 在脚本文件中只能使用$(())

示例代码:

like@ubuntu:~$ echo 1+1

1+1

like@ubuntu:~$ echo $((1+1))

2

like@ubuntu:~$ echo $[ 1+1 ]

2

like@ubuntu:~$ a1=2

like@ubuntu:~$ echo $(($a1+1))

3

like@ubuntu:~$ echo $[ ${a1}+1 ]

3

5.shell 流程控制(判断)

5.1 条件测试

概念:

通过test或 [] 可以测试一个条件是否成立

语法:

--方法一

test 值1 条件 值2

--方法二

[值1 条件 值2]

脚下留心:0-代表结果成立,1-代表结果不成立

示例代码: 5>3 ? 5>7 ?

like@ubuntu:~$ [ 5 -gt 3 ]

like@ubuntu:~$ echo $?

0

like@ubuntu:~$ [ 5 -gt 7 ]

like@ubuntu:~$ echo $?

1

5.2 if else 语句

语法:

if 条件1

then

命令1

elif 条件2

then

命令2

else

命令

fi

示例代码1:

判断成绩(>=90优秀,>=80良好,>=60及格,>=0不及格)

like@ubuntu:~$ vim test3.sh

like@ubuntu:~$ cat test3.sh

#!/bin/bash

SCORE=$1

if [ $SCORE -ge 90 ]

then

echo '优秀'

elif [ $SCORE -ge 80 ]

then

echo '良好'

elif [ $SCORE -ge 70 ]

then

echo '一般'

elif [ $SCORE -ge 60 ]

then

echo '及格'

elif [ $SCORE -ge 0 ]

then

echo '不及格'

else

echo '有瑕疵'

fi

like@ubuntu:~$ sh test3.sh 99

优秀

示例代码2:

判断当前执行脚本是否是root用户

vim who.sh

like@ubuntu:~$ cat who.sh

#!/bin/bash

who=$(whoami)

if [ $who!='root' ]

then

echo 'wrong'

echo $who

else

echo 'right'

fi

like@ubuntu:~$ sh who.sh

wrong

like

5.3 case语句

语法:

case $变量名 in

"值1")

如果变量的值等于值1,则执行程序1

;;

"值2")

如果变量的值等于值2,则执行程序2

;;

....

*)

如果以上都不成立,则执行此程序

;;

esac

示例代码:

需求:执行脚本让用户输入

yes - installing...

no - skip

其他 - Please enter the correct option

like@ubuntu:~$ vim case.sh

like@ubuntu:~$ cat case.sh

#!/bin/bash

read -p "Please Input yes/no: " Select_Id

case $Select_Id in

"yes")

echo 'installing...'

;;

"no")

echo 'skip'

;;

*)

echo 'Please enter the correct option'

;;

esac

like@ubuntu:~$ sh case.sh

Please Input yes/no: yes

installing...

like@ubuntu:~$ sh case.sh

Please Input yes/no: no

skip

6.shell 循环

6.1 for 循环

语法:

for 变量名 in 值1 ... 值N

do

命令

done

示例代码1:

输出6个数

like@ubuntu:~$ vim for.sh

like@ubuntu:~$ cat for.sh

#!/bin/bash

for i in 1 2 3 4 5 6

do

echo $I

done

like@ubuntu:~$ sh for.sh

1

2

3

4

5

6

示例代码2:

输出指定目录下得所有文件名

like@ubuntu:~$ vim for1.sh

like@ubuntu:~$ cat for1.sh

#!/bin/bash

cd $1

filenames=$(ls)

for name in $filenames

do

echo $name

done

like@ubuntu:~$ sh for1.sh /home

like

6.2 while 循环

语法:

while 条件

do

命令

done

示例代码1:

输出1-10

like@ubuntu:~$ vim while.sh

like@ubuntu:~$ cat while.sh

#!/bin/bash

I=1

while [ $i -le 10 ]

do

echo $I

i=$(($i+1))

done

like@ubuntu:~$ sh while.sh

1

2

3

4

5

6

7

8

9

10

7. 计划任务

7.1 介绍

概 念:约定时间执行指定任务(或执行指定脚本文件)

举例1:通过计划任务定时发布文章

举例2:通过计划任务凌晨3点将测试服务器项目代码同步到线上服务器

7.2 使用

步骤1:通过命令【crontab -e】编写计划任务

步骤2:按【i】键编写,最后按【esc】【:wq】保存并退出

-- crontab 指令介绍

usage: crontab [-u user] file

crontab [ -u user ] [ -i ] { -e | -l | -r }

(default operation is replace, per 1003.2)

-e (edit user's crontab) ---编写计划

-l (list user's crontab) --- 查看计划

-r (delete user's crontab) --- 删除计划

-i (prompt before deleting user's crontab) --- 删除计划前提示

7.3 语法

*     *     *     *     *     任务

项目

含义

范围

第一个*

分钟

0~59

第二个*

小时

0~23

第三个个*

天数

1~31

第四个*

月份

1~12

第五个*

星期

0~7(0&7代表星期天)

项目

含义

例子

代表不连续时间

0 8,12,16 * * * 每天8,12,16点执行

-

代表连续时间

0 5 * * 1-6 每周一到六 5点执行

* /n

代表间隔多久执行

*/10 * * * *每隔10min执行

示例代码:

// 创建计划任务

like@ubuntu:~$ crontab -u like -e

no crontab for like - using an empty one

crontab: installing new crontab

// 查看计划任务

like@ubuntu:~$ crontab -l

# Edit this file to introduce tasks to be run by cron.

#

# Each task to run has to be defined through a single line

# indicating with different fields when the task will be run

# and what command to run for the task

#

# To define the time you can provide concrete values for

# minute (m), hour (h), day of month (dom), month (mon),

# and day of week (dow) or use '*' in these fields (for 'any').#

# Notice that tasks will be started based on the cron's system

# daemon's notion of time and timezones.

#

# Output of the crontab jobs (including errors) is sent through

# email to the user the crontab file belongs to (unless redirected).

#

# For example, you can run a backup of all your user accounts

# at 5 a.m every week with:

# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

#

# For more information see the manual pages of crontab(5) and cron(8)

#

# m h dom mon dow command

*/1 * * * * echo 9 >> /home/like/test.txt ---- 每分钟给test.txt 追加9

like@ubuntu:~$ crontab -r -- 删除计划

like@ubuntu:~$ crontab -l

no crontab for like -- 删除成功

示例2:

时间

含义

45 22 * * * 命令

在22点45分执行

0 17 * * 1 命令

每周一17点执行

0 5 1,15 * * 命令

每月1和15号5点执行

40 4 * * 1-5 命令

每周1~5 4点40 执行

*/10 4 * * * 命令

每天4点每隔10min执行

0 0 1,15 * 1 命令

每月1和15 号 每周一的0点执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值