Shell脚本的语法
Posted LiuJun2Son
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本的语法相关的知识,希望对你有一定的参考价值。
Shell脚本的语法
Shell Script ,Shell脚本与Windows / Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
1.一个简单的Shell脚本
1.新建一个 01-shell.sh
文件
下面的#!/usr/bin/bash
是指定该文件将使用bash命令解析器解析执行 。
其它写法:#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
,它们之间的区别可以自行Google
#!/usr/bin/bash
echo 'hello world1'
echo hello world2
echo 'hello1' echo 'world1'
echo 'hello2' ; echo 'world2'
echo '---------1--------------'
mkdir /a/b/c && echo 'ok....'
# 查看返回结果,返回 0 代表成功,非 0 代表失败
echo $?
echo '---------2--------------'
mkdir -p /usr/src/test && echo '新建目录成功'
echo '上面指令返回值:'$?
echo '---------3--------------'
mkdir /usr/src/test || echo '已经存在该目录'
2.在终端执行 bash 01-shell.sh
文件,并查看控制台输出
[root@ocr shell-sty]# bash 01-shell.sh
hello world1
hello world2
hello1 echo world1
hello2
world2
---------1--------------
mkdir: cannot create directory ‘/a/b/c’: No such file or directory
1
---------2--------------
新建目录成功
上面指令执行的返回值: 0
---------3--------------
mkdir: cannot create directory ‘/usr/src/test’: File exists
已经存在该目录
2.Shell定义变量
1.新建一个 02-shell.sh
文件
#!/usr/bin/bash
# 定义变量
your_name="liujun"
# 使用变量
echo $your_name
echo $your_name
echo ---------1.双引号----------
# 使用双引号拼接
greeting="hello, "$your_name" !" # 正确
greeting_1="hello1, $your_name !" # 正确
echo $greeting $greeting_1
echo ---------2.单引号----------
# 使用单引号拼接
greeting_2='hello2, '$your_name' !' # 正确
greeting_3='hello3, $your_name !' # 错误
echo $greeting_2 $greeting_3
echo ---------3.数组----------
# 定义数组
array_name=(
liujun
rose
jack
llili
)
echo $array_name[0] # 取第一个
echo $array_name[@] # 取所有
2.在终端执行 bash 02-shell.sh
文件,并查看控制台输出
liujun
liujun
---------1.双引号----------
hello, liujun ! hello1, liujun !
---------2.单引号----------
hello2, liujun ! hello3, $your_name !
---------3.数组----------
liujun
liujun rose jack llili
3.接收执行命令传递的参数
1.新建一个 03-shell.sh
文件
#!/usr/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
2.在终端执行 bash 03-shell.sh
文件,并查看控制台输出
其中 1 2 a 是传递的参数,通过 $1 $2 $3
[root@ocr shell-sty]# bash 03-shell.sh 1 2 a
Shell 传递参数实例!
执行的文件名:03-shell.sh
第一个参数为:1
第二个参数为:2
第三个参数为:a
4.Shell 基本运算符
1.新建一个 04-shell.sh
文件
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr
,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):
#!/usr/bin/bash
a=10
b=20
result1=`expr $a + $b`
echo "a + b : $result1"
result2=`expr $a - $b`
echo "a - b : $result2"
result3=`expr $a \\* $b` # 注意乘法需要转译
echo "a * b : $result3"
result4=`expr $b / $a`
echo "b / a : $result4"
result5=`expr $b % $a`
echo "b % a : $result5"
2.在终端执行 bash 04-shell.sh
文件,并查看控制台输出
[root@ocr shell-sty]# bash 04-shell.sh
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
5.Shell 流程控制
1.新建一个 05-shell.sh
文件
if 条件写在 [ ] 内
#!/usr/bin/bash
a=10
b=20
echo ---------1.if语句----------
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
echo "xxxxxx"
pwd # 往下还可以执行多个命令
else
echo "$a -eq $b: a 不等于 b"
fi
echo ---------2.if else 语句----------
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
echo ---------3.if elif 语句----------
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
echo ---------4.for 语句----------
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
echo ---------5.for 语句----------
for str in This is a string
do
echo $str
done
2.在终端执行 bash 05-shell.sh
文件,并查看控制台输出
[root@ocr shell-sty]# bash 05-shell.sh
---------1.if语句----------
10 -eq 20: a 不等于 b
---------2.if else 语句----------
10 -ne 20: a 不等于 b
---------3.if elif 语句----------
a 小于 b
---------4.for 语句----------
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
---------5.for 语句----------
This
is
a
string
6.编写定时任务执行Shell脚本
在Linux下我们用 crontab( 定时任务) 来实现定期执行脚本。
1.查看 crontab 配置信息 输入命令:cat /etc/crontab
[root@ecs-s2-medium-2-linux-20190804173931 demo1]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
2.查看 crontab 的命令
[root@ecs-s2-medium-2-linux-20190804173931 demo1]# crontab --h
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
usage: crontab [-u user] file
crontab [-u user] [ -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)
-s (selinux context)
3.查看当前用户所有的定时任务(crontab)
下面显示当前用户有一定时任务,默认是没有的
[root@ecs-s2-medium-2-linux-20190804173931 demo1]# crontab -l
*/1 * * * * bash /usr/local/test-shell/demo1/01-shell.sh
4.删除当前用户所有的定时任务(crontab)
删除定时任务后会自定停止该定时任务
[root@ecs-s2-medium-2-linux-20190804173931 demo1]# crontab -r
3.编辑当前用户所有的定时任务(crontab)
下面编写一个每分钟执行一次 01-shell.sh 脚本的定时任务。
[root@ecs-s2-medium-2-linux-20190804173931 demo1]# crontab -e
*/1 * * * * bash /usr/local/test-shell/demo1/01-shell.sh
~
~
~
~
~
~
执行crontab -e 会进入vi界面。
编写完后定时任务后 按键盘的 esc,之后在按ctrl + : 然后输入 wq , 确认保存退出,定时任务自动生效。
以上是关于Shell脚本的语法的主要内容,如果未能解决你的问题,请参考以下文章