shell编程

Shell Script介绍

概念

Shell脚本是包含一系列命令的文本文件
Shell读取从文件并执行命令

应用场景

重复性操作
批量事物处理
自动化运维
定时任务执行

编写第一个Shell脚本test.sh

创建一个test.sh脚本文件:

[root@hadoop001 shell]# vi test.sh

输入:

#!/bin/bash
echo "Hello World"

保存退出,给脚本赋执行权,运行Shell脚本:

[root@hadoop001 shell]# chmod +x test.sh
[root@hadoop001 shell]# ./test.sh
Hello World

注意:#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行

变量

命名规则

只能使用英文字母,数字和_,首字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字

三种引号

反引号:引用命令的结果
[root@hadoop001 shell]# echo `date`
单引号:强引用,引号中输入什么,输入就是什么
[root@hadoop001 shell]# echo 'date'

在这里插入图片描述

双引号:弱引用,可引用变量的值
[root@hadoop001 shell]# echo "$PATH"

变量的定义及使用

变量的定义

创建一个test2.sh文件:

[root@hadoop001 shell]# vi test2.sh

输入:

#!/bin/bash
#定义变量直接赋值
vara=1234
#环境变量可以直接使用
varb=$JAVA_HOME
#直接引用变量
varc=vara
#间接引用
vard=${!varb}
#将23转换为a b c
vare=${vara/23/'a b c'}
#将命令的结果分配给变量
varf=`pwd`
#打印结果
echo $vara
echo $varb
echo $varc
echo $vard
echo $vare
echo $varf

给test2.sh赋权,执行test.sh:

[root@hadoop001 shell]# chmod +x test2.sh 
[root@hadoop001 shell]# ./test2.sh

变量运算

#!/bin/bash
a=1
b=2
c=$(($a+$b))
d=$[ $a + $b ]
echo $c
echo $d

预定义变量

选项说明
$#命令行参数或位置参数的数量
$?最近一次执行的命令或shell脚本的出口状态
$*表示所有的位置参数,其值是所有位置参数的值
$$变量是shell脚本里面的进程ID。Shell脚本经常使用 $$ 变量组织临时文件名,确保文件名的唯一性

位置变量

$n:$0代表命令本身,$1-9 代 表 顺 序 参 数 编 号 , 大 于 10 的 话 使 用 括 号 , 如 9代表顺序参数编号,大于10的话使用括号,如9代表顺序参数编号,大于10的话使用括号,如{10}
示例:

[root@hadoop001 shell]# vi test3.sh

输入:

#!/bin/bash
echo 参数个数: $#
echo 所有位置参数: $*
echo '上一句结果(执行成功为0):' $?
echo 进程id: $$
echo 当前命令: $0
echo 第一个参数: $1
echo 第二个参数: $2

给test3.sh赋权,并执行:

[root@hadoop001 shell]# chmod +x test3.sh
[root@hadoop001 shell]# ./test3.sh

Shell数值关系运算符

数值关系运算符

选项说明
-eq等于
-ne不等于
-gt大于
-lt小于
-le小于或等于
-ge大于或等于

逻辑运算符

选项说明
-a或&&逻辑与
-o或ll逻辑或
!逻辑否

字符串运算符

选项说明
=等于
!=不等于
-z判断是否为空

文件运算符

选项说明
-d判断是否为目录
-e判断目录或文件是否存在
-f判断是否为文件
-r判断文件或目录针对当前用户是否可读
-w判断文件或目录针对当前用户是否可写
-x判断文件或目录针对当前用户是否可执行

流程控制

shell的流程控制不可为空

if选择语句

if语句

if
then
	...
fi

if-else语句

if 
then
	...
else
	...
fi

if else-if else语句

if
then
	...
elif
then
	...
else
	...
fi

for循环语句

一般for循环

for var in item1 item2 ... itemN
do
	...
done

增强for循环

for(i=0;i<=5;i++)
do
	...
done

while循环语句

while condition
do
	...
done

until循环语句

until condition
do
	...
done

case语句

case 值 in
模式1)
	...
;;
模式2)
	...
;;
模式*)
	...
;;
esac

跳出循环

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。

continue命令

continue命令仅仅跳出当前循环。

Shell函数
语法如下:

函数名()
{
	#函数代码
}
#输入函数名直接调用
函数名

示例如下:

#!/bin/bash
a(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
a
echo "-----函数

TMOUT

TMOUT:在用户输入空闲一段时间后自动断开

#!/bin/bash
TMOUT=3
echo "What is your name?"
echo "You only have $TMOUT seconds to answer!"
read name
if [ $? -eq 0 ]; then
  echo "Your name is $name"
else
  echo "Timed out!"
  exit 1
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值