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 {name}和转义字符
拼接字符串:两个变量直接放到一起就行:“aaa”“bbb"或者’aaa’‘bbb’
获取字符串长度:echo ${#name} 输出结果为4
提取字符串:1:4从第2个字符开始,提取四个echo {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 删掉该定时任务(不用的话必须删掉,不然一致执行。关机不执行)