shell脚本(变量-流程控制-定时任务)

添加链接描述

1.什么是shell脚本:

shell处于linux内核与用户之间,是命令编译器;用户写shell命令,交给shell编译成二进制,再传递给内核执行;内核执行完后,返回的二进制结果交给shell,shell翻译成用户可以识别的语言,交给用户;
shell脚本是shell命令组成的文本文件。
2.shell注释:
单行注释:#
多行注释::<<EOF

EOF(随便写EOF,只要前后对应就行)
3.知乎连接:
4.变量
会话变量
局部变量(只在当前shell脚本中可用)
环境变量(所有shell脚本都可用)
shell变量(shell程序设置的特殊变量)
5. 变量操作
创建:name=“test”(=两边不可有空格)
使用变量:echo $name 或者 echo n a m e 推 荐 使 用 大 括 号 ; 双 引 号 里 里 可 以 调 用 变 量 而 不 被 当 成 字 符 串 , 和 j a v a 不 一 样 。 常 量 : r e a d o n l y a 注 销 变 量 名 : u n s e t a 不 支 持 浮 点 运 算 , 需 要 a − b ∣ b c 来 支 持 作 用 范 围 : 脚 本 里 的 变 量 只 在 该 脚 本 里 有 用 , e x p o r t 能 导 出 来 6. 字 符 串 变 量 单 引 号 : v a r = ′ t e s t ′ 单 引 号 里 不 能 使 用 变 量 双 引 号 : v a r = " t e s t " 双 引 号 里 可 以 使 用 变 量 {name} 推荐使用大括号;双引号里里可以调用变量而不被当成字符串,和java不一样。 常量:readonly a 注销变量名:unset a 不支持浮点运算,需要a-b|bc来支持 作用范围:脚本里的变量只在该脚本里有用,export能导出来 6. 字符串变量 单引号:var='test' 单引号里不能使用变量 双引号:var="test" 双引号里可以使用变量 name使javareadonlyaunsetaabbcexport6.var=test使var="test"使{name}和转义字符
拼接字符串:两个变量直接放到一起就行:“aaa”“bbb"或者’aaa’‘bbb’
获取字符串长度:echo ${#name} 输出结果为4
提取字符串:1:4从第2个字符开始,提取四个echo n a m e : 1 : 4 查 找 : e c h o ‘ e x p r i n d e x " {name:1:4} 查找:echo `expr index " name:1:4echoexprindex"{name}” params (最外层有反引号,按字母匹配不是全匹配,返回数字)
汉子UTF8和GBK的字符数3或者2
::4 从第一个字符开始,往后截取4个字符echo ${name::4}
数组:
定义数组:array_name=(zhao qian sun li)
数组赋值:array_name[0]=“zhao”
数组变量的使用:#{array_name[0]}
数组全打印:echo ${a[@]}或者echo ${a[*]}
read参数传递
#!/bin/bash
echo ‘请输入数字:’
read a
echo ${a}
结果:
[root@hadoop8 lcs]# ./ceshi.sh
请输入数字:
25
25

布尔型赋值
read a(读取参数)
$0:控制台输入的指令

运算符

1.算数运算符:+ - * / (乘号前需要\转义)需要用expr支持,expr后的算式要加空格val=expr 2 + 2(最外层有反引号)
2.数学关系运算符(只 + 支持数字):-
-eq:检测两个数字是否相等
-ne:不相等
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
3.字符串运算符
=:检测两个字符串是否相等
!=:不相等
-z:是否为空
-n:是否为非空
$:是否为非空
4.布尔运算符
-a:与
-o:或
!:非
5.逻辑运算符
&&:逻辑and
||:逻辑or
6.文件运算符
-d:检测文件是否为目录directory
-f:检测文件是否为普通文件
-w:是否可写
-r:是否可读
-x:是否可执行
-s:是否为空文件
-e:目录是否存在

流程控制语句

if语句:
if codition then command elif condition then command else condition fi
括号的用法添加链接描述
方括号内各元素之间要加空格
if test 后面就不用中括号了

case语句:
case 值 in 模式1) command1;;模式2) command2;;*) command3;;esac
(;;可以用break代替,但是break会跳出case外面的while等循环)

while condition do command done
例如:
i=1
while ((i<5))
do
自增:let i++
echo ${i}
done

until condition do command done

for(四种,举例)
类C语句:for((integer=1;integer<5;integer++) )do command done
列表:for variable in 1 2 3 4 5 do command done
或者for variable in {1…5} do command done
(类似增强for循环:
for i in ${a[@]}
do
echo $i
done

无列表:for argument do command done(argument需要用户指定值,否则不执行循环体)

括号的用法

括号的用法添加链接描述
方括号内各元素之间要加空格
if test 后面就不用中括号了
单引号:‘’ 引用字符串,不能包含变量;
双引号:“” 引用字符串,里面可以包含变量;定义变量;
单小括号:() 数组赋值;
单中括号:[] 条件判断
单大括号:{} 包含一段语句块
反引号``、$():命令替换
[ ] 、 ( ( ) ) 、 []、(())、 [](())(()):算数运算
双中括号[[]]:逻辑运算
${}:变量替换

编写shell脚本

创建aa.sh脚本:vi aa.sh
首行:#!bin/env bash
for value
do
echo hello
done
保存退出
赋予权限:chmod +x 文件名
执行./aa.sh

不执行循环
执行./aa.sh a b c
执行结果:hello hello hello

shell脚本输入

$1-9是输入几个数,超过10要用{};
$# 传递到脚本的参数个数;
$* 以一个字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID
$@ 显示所有输入的参数
$? 显示最后命令的退出状态,0代表没有错误,其它代表出错

Shell函数(shell脚本相当于函数,shell内部的函数不常用)

[ fuction ] funname[ () ]{
action
return xx
}

Crontab定时任务(以后会用到)

创建格式:***** sh 可执行文件(比如shell脚本)输出到指定文件里
说明:(分时日月周)定时执行该文件,如果有输出的话,放到指定文件里
15**** sh opt/test/func.sh > opt/test/a.txt
(每个小时的15分,func.sh执行的输出结果写入到a.txt里)
crontab [ -u username]

crontab -r 删掉该定时任务(不用的话必须删掉,不然一致执行。关机不执行)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值