AI智能
改变未来

shell的基础语法和常用脚本


shell的基础语法和常用脚本

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Linux 的 Shell 种类众多,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)

本文关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

创建Shell脚本

新建一个文件,

test.sh

,扩展名为sh,代表shell
文件第一行格式

#!/bin/bash

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

运行Shell脚本的方式

1,作为可执行程序,
将上面的代码保存为 test.sh,并 cd 到相应目录:

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

2,作为解释器参数
直接运行解释器,其参数就是shell脚本的文件名,如

/bin/bash test.sh

这种方式运行的脚本,就不需要在第一行指定解释器信息,写了也不作数

Shell 变量

定义变量:

var=\"abc\"  #变量名和等号之间不能有空格

除了直接赋值,也可以用语句给变量赋值,如

for file in `ls /etc`  #将/etc下目录的文件名循环出来

使用变量:
在变量名前加美元符即可

$

,把变量名用大括号括起来(这个适当情况可以省略)

echo ${var}var  #这里不能省略

可以设置只读变量

#!/bin/bashvar=\"iphone6s\"readonly var #只读

删除变量

unset var   #删除

shell字符串
单引号, 原样输出,变量在里面是无效的
双引号,可以有变量,可以出现转义字符

shell支持数组,用空格分开

数组名=(值1 值2 ... 值n)

可以不使用连续的下标,而且下标的范围没有限制。
读取数组:

${数组名[下标]}listone=${list[1]}

使用@符号,可以获取数组中的全部元素

echo ${list[@]}

获取数组长度和字符串长度:(名字前加**#** 号)

length=${#list[@]}

shell 传参

1,

$n

n是一个数字,从1开始,代表第几个传进来的参数,如

$1

代表第一个传进来的参数

$0

,代表在执行的文件名
2,特殊字符

参数处理 说明

$#

, 传递到脚本的参数个数

$*

, 以一个单字符串显示所有向脚本传递的参数。
如\”$*“用「”」括起来的情况、以\”$1 $2 … $n\”的形式输出所有参数。

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

运算

1,基本运算
expr是一个表达式计算工具,表达式要被反引号“包含,表达式和运算符之间要有空格

#!/bin/bashvar=`expr 2 + 2`echo \"两数之和为 : $var\"

2,算数运算符
表达式要放在方括号中间,而且要有空格
如:

[ $a == $b ]

3,关系运算符
表达式要放在方括号中间,而且要有空格
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

#!/bin/basha=10b=20if [ $a -eq $b ]thenecho \" a 等于 b\"elseecho \" a 不等于 b\"fi

流程控制

1,if_ifelse_else格式

if condition1thencommand1elif condition2thencommand2elsecommandNfi

2,for循环

for var in item1 item2 ... itemNdocommand1command2...commandNdone

还有一种

for((a=1;a<=5;a++))docommand...done

3,while语句

#!/bin/bashint=1while(( $int<=5 ))doecho $intlet \"int++\"done

4,case语句

case 值 in模式1)command1;;模式2)command1;;*)echo \"包含所有的意外情况\";;esac

5,break和continue
break命令允许跳出所有循环(终止执行后面的所有循环)。
continue命令不会跳出所有循环,仅仅跳出当前循环。

常用shell脚本

1,tomcat启动脚本

[root@promote tmp]# vi tomcatstart.sh   //创建一个shell脚本文件
#!/bin/bash#开启tomcatstart(){              #启动函数cd /opt/apache-tomcat-8.5.45./bin/startup.sh}close(){              #关闭函数cd /opt/apache-tomcat-8.5.45./bin/shutdown.sh}case $1 in          #根据第一个输入的参数,进行流程控制start)start;;close)close;;*)echo \"please put start or close\";;esac

保存退出之后开始测试

[root@promote tmp]# chmod +x tomcatstart.sh   #赋权[root@promote tmp]# ./tomcatstart.shplease put start or close[root@promote tmp]# ./tomcatstart.sh  startUsing CATALINA_BASE:   /opt/apache-tomcat-8.5.45Using CATALINA_HOME:   /opt/apache-tomcat-8.5.45Using CATALINA_TMPDIR: /opt/apache-tomcat-8.5.45/tempUsing JRE_HOME:        /opt/jdk1.8.0_221/jreUsing CLASSPATH:       /opt/apache-tomcat-8.5.45/bin/bootstrap.jar:/opt/apache-tomcat-8.5.45/bin/tomcat-juli.jarTomcat started.                      #启动成功
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » shell的基础语法和常用脚本