shell脚本
1.基本语法
1).vim
o:光标下一行输入
dd:删除本行内容
ndd:删除包括本行及以后的n行文本
ZZ:保存并退出
gg:移动到文件开头
G:移动到文件末尾
gg回到文件开头 dG删除所有的文本内容
2)echo
echo [选项] [输出内容]
-e:支持反斜线控制的字符转换
-n:内容输出后不换行
[root@localhost ~]# echo "你好\t你好"
你好\t你好
[root@localhost ~]# echo -e "你好\t你好"
你好 你好
[root@localhost sh]# touch sh1.sh 脚本都以.sh结尾 使用sh执行脚本
#!/bin/bash bash解析器
shell逻辑运算符
; #多条命令顺序执行
&& #命令1&&命令2 如果命令1正确 则执行命令2 如果不正确 则命令2不执行
|| #如果命令1不正确,则命令2才会执行
shell 变量和运算符
1)单引号 ' ' :单引号里面的所有字符都是普通字符。
2)双引号 " ":双引号会保留变量特性,用值替换。
3)反引号 ` `:用倒引号括起一个命令时,这个命令将会被执行,执行后的结果作为这个表达式的值。
说明
1. 变量的定义与使用规则:
1)变量名首字符必须为字母,名字只能用字母、数字、下滑线,不要用bash关键字。非法的名字:8var、var-8
2)变量定义或赋值时,变量名与值之间用等号连接:变量名=值,等号两边不能有空格,值中有空格或特殊字符需要用双引号或单引号引起来。
3)使用 $变量名 或 ${变量名} 形式获取变量值
系统变量
#常用系统变量
$HOME、$PWD、$SHELL、$USER
变量定义中符号的使用
1)单引号 ' ' :单引号里面的所有字符都是普通字符。
2)双引号 " ":双引号会保留变量特性,用值替换。
3)反引号 ` `:位于Esc 键下方,用倒引号括起一个命令时,这个命令将会被执行,执行后的结果作为这个表达式的值。
位置变量使用
数组定义
常量列表的方式
#用空格分隔
arr1=("a" "ab" "bc")
直接下标引用,自动定义
arr2[0]=1
arr2[1]=3
arr2[2]=4
declare 命令定义数组 ***
#定义数据arr3,并初始化元素
declare -a arr3=('a' 'b')
#先定义,后给元素赋值
declare -a arr3
arr3[0]="a"
arr3[1]="b"
算术运算符(三种方式)
如果变量自增用((x++)), 如果自增并输出用$((x++))
数组使用
获取数组长度:用${#数组名[@或*]} 可以得到数+-组长度
${#arr[*]} 或 ${#arr[@]}
读取数组元素:
读取下标为1的元素:${arr[1]}
读取数组整个元素:${arr[*]}
给数组元素赋值:
arr[1]=1
删除数组元素:
删除后,数组长度改变
unset arr[1]
数组切片:
${数组名[@或*]:起始位置:长度}
切片原先数组,返回是字符串,中间用“空格”分开。
如果加上”()”,将得到切片数组
浮点数的运算
1.bc:一款高精度计算语言
2.bc支持算数运算,逻辑运算,比较运算
3.支持批处理和以管道方式处理表达式计算
例:
(1).直接在终端输入bc即可运算,ctrl+c退出bc程序
(2).在shell脚本中可使用如下命令: bc 如何正确的保留两位小数
num=$(echo "scale=2;2.03+2.04"|bc) #scale表示小数位数
echo $num
注意 : 使用的时候需要先以root身份登录安装bc才可以使用
yum -y install bc
比较运算符
一般 -eq 这种,用[]
== > < 这种用[[]]
[]中间必须有空格
数字比较
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
== 等于
!= 不等于
< 小于
> 大于
一般 -eq 这种,用[]
== > < 这种, 用[[]]
字符串比较
==
!=
-z 比较字符串长度 为0 -->true
-n 比较字符串长度 补位0 -->true
[]中不能用|| 或者 &&
字符串非空校验
[ "${str}x" == x ] && echo 'ok' #这里字符串要用"",输出
字符串自增操作
((index++)): 如果i值自增,可用此写法,也可以 写成 index=$((index + 1))
逻辑运算符
! 非
-o 或
-a 与 true true -->true
|| 或 [[]] || [[]]
&& 与 [[]] && [[]]
判断读取字符串值
字符串读取,截取,长度,替换
read
从键盘接收: read 变量名
Linux read命令用于从标准输入读取数值。
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
*** -p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
*** -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
流程控制语句
if判断
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
#完整结构
if [条件表达式]
then
程序
elif [条件表达式]
then
程序
else
程序
fi
#注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
[niuniu@hadoop101 datas]$ chmod 777 if.sh #执行shell前要赋予权限
case 语句
1.基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
#注意事项:
1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
2)双分号“;;”表示命令序列结束,相当于java中的break。
最后的“*)”表示默认模式,相当于java中的default。
for 循环
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2.基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
3.基本语法3
#满足条件则循环否则退出
for (( 控制变量的初始化; 循环的条件; 循环控制变量的更新 ))
do
循环体代码段
done
while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
shell函数
# 不带有返回值的函数
function 函数名称()
{
语句块
}
函数名称()
{
语句块
}
使用函数的时候
函数名称 参数1 参数2 参数3 .... 参数N
函数,有返回值(只能是int类型 0或非0 代表脚本执行是否成功) 的方法
function 函数名称()
{
语句块
echo 返回结果 或者 return(推荐) 返回结果
}
或者
函数名称()
{
语句块
echo 返回值 或者 return(推荐) 返回结果
}
shell工具 重点
cut
cut 在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut [选项参数] filename
-f : 列号,提取第几列
-d : 隔符,按照指定分隔符分割列
sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
1.基本用法
sed [选项参数] ‘command’ filename
2.选项参数说明
-e #直接在指令列模式上进行sed的动作编辑。
a #新增,a的后面可以接字串,在下一行出现
d #删除
s #查找并替换
awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
#1.基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
注意:这里的模式匹配需要使用单引号,因为双引号会对正则的一些特殊符号处理
-F #指定输入文件折分隔符
-v #赋值一个用户定义变量
sort
# sort命令 将文件进行排序,并将排序结果标准输出
sort(选项)(参数)
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列