shell变量,shell函数,shell数组,shell常用命令,shell流程控制语句

什么是shell脚本?

Linux命令正常情况都是在命令行执行,如果将命令放到一个文件中执行,该文件就是一个shell脚本。从事linux系统工程师岗位,shell编程人员。
Shell就是一个普通文本文件,有一大堆的linux命令堆砌而成。一般以.sh为后缀。
Shell脚本不需要编译,逐行执行。常见的shell解释器有bash,dash,csh,ksh。
Shell脚本可以接受参数的。并且shell语法支持大部分流行编程语言的语法,循环语句,流程控制语句,支持函数。
可以理解shell脚本就是一种编程语言。

Shell脚本的编写,执行和调试

编写shell脚本

vim myshell.sh

如果当前目录不存在myshell.sh则会新建文件

在这里插入图片描述

第一行是指定shell解释器,#!/bin/sh
#是注释,一个作用是描述信息,另外一个作用是注释代码,使某一行代码失效。相当于java中的//

给脚本授予执行权限
在这里插入图片描述

shell的执行有两种:
./name
sh name
shell的调试sh -x name

Shell变量

shell中没有变量的类型,可以认为都是字符串
shell中的变量可以分四大类

  1. 本地变量:仅在当前的shell中生效,shell执行完之后失效。
  2. 环境变量:在当前shell和子shell都生效(export b),如果在子shell中定义,在父shell无法获取。
  3. 位置参数变量: 函数或者脚本的参数相关 $1表示脚本的第一个参数,$n标识第N个参数
    位置参数的作用:接收脚本的参数,接受函数的参数
  4. 特殊变量:shell脚本自带的

在这里插入图片描述

参数相关
$* 获取所有参数,将所有的参数作为一个字符串。
$# 获取参数的个数
$0 获取shell脚本的名字

进程相关
$$ 显示当前shell的进程号
$? 显示上一条命令的返回值
命令和shell的返回值分类
0 正常返回(command not found)
127 命令不存在
126 没有权限(Permission denied)

Shell中的函数

myfunction(){
  echo "function body"
  echo $1 $2
}

带返回值的函数

function add(){
   a=$1
   b=$2
   c=$(($a+$b))
   return $c
}

调用函数

#!/bin/sh
. /home/shell/functions.sh
add 11 33
echo $?

shell脚本中的返回值默认0-255,必须是数字。
不建议直接返回计算的数值,将结果在函数内部打印

Shell中的数组

shell中只有一维数组,数组的下标从0开始。
定义方式
array_name=(value1 value2…) 注意,值之间的分隔符是空格
取值方式
array_name[0]=value1
在这里插入图片描述

获取数组的内容
${myArr[*]} *可以换成@
获取数组的长度
${#myArr[*]}

Shell常用命令

exit,退出命令,shell脚本默认退出值为0-255,0代表成功,1-255代表异常。
通过$?获取退出代码。
在这里插入图片描述
数据的定向
>> 和> 表示写入
>>是追加内容
>是覆盖内容
<<和< 表示读入
通过shell脚本修改主机名
update_host_name.sh hostname
修改/etc/hostname的内容
方法一:使用写入方式

#!/bin/sh
# this is update hostname
hostname=$1
echo $hostname > /etc/hostname
Reboot

方法二:使用读入方式

#!/bin/sh
# this is update hostname
cat > /etc/hostname <<EOF
server03
EOF
Reboot

EOF是截止符,EOF之前的内容都会被定向到目标文件中。
方法二比方法一的有点在于,可以写入多行。

输出日志到垃圾堆 >/dev/null 2>&1

Shell中的流程控制语句

Linux中的关系运算符

运算符 含义

  • -eq 是否相等,相等返回true
  • -ne 不相等,不相等返回true
  • -gt 大于返回true
  • -lt 小于返回true
  • -ge 大于等于返回true
  • -le 小于等于返回true

Linux中的布尔运算符

-a 的意思就是左右两个条件都满足相当于java中的&&
-o 的意思是左右两个条件只要有一个满足就行,相当于java中的||

文件测试运算符
测试linux操作系统的文件的属性

-f (file)判断文件是否存在并且是否是文件
-d (directory)判断文件是否存在是否是目录(cd aaa)

if语句

if 条件
then
满足条件要执行的内容
fi
在这里插入图片描述

[]是条件判断

在这里插入图片描述

elif相当于java中的elseif

while循环

let 可以使用expr代替 ,expr需要把变量的$加上
Let是linux中的一种算术计算工具。
在这里插入图片描述

for循环

在这里插入图片描述

练习: 根据应用名称杀死对应的进程。

 #!/bin/sh
if [ $# -eq 1 ]
then
    app=$1
    pid=`ps -ef | grep $app| grep -v grep| grep -v $0 | awk  -F ' ' '{print $2}'`
    echo $pid
        kill -9 $pid
    echo $1'已经被杀死了'
else
    echo '请输入一个参数例如:' $0 'tomcat'
fi

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打乒乓球只会抽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值