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/bash
var="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/bash
var=`expr 2 + 2`
echo "两数之和为 : $var"

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

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

#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo " a 等于 b"
else
   echo " a 不等于 b"
fi

流程控制

1,if_ifelse_else格式

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

2,for循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

还有一种

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

3,while语句

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "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
#开启tomcat
start(){              #启动函数
        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.sh
please put start or close
[root@promote tmp]# ./tomcatstart.sh  start
Using CATALINA_BASE:   /opt/apache-tomcat-8.5.45
Using CATALINA_HOME:   /opt/apache-tomcat-8.5.45
Using CATALINA_TMPDIR: /opt/apache-tomcat-8.5.45/temp
Using JRE_HOME:        /opt/jdk1.8.0_221/jre
Using CLASSPATH:       /opt/apache-tomcat-8.5.45/bin/bootstrap.jar:/opt/apache-tomcat-8.5.45/bin/tomcat-juli.jar
Tomcat started.                      #启动成功

猜你喜欢

转载自blog.csdn.net/yanglitian_123/article/details/106906613