SHELL

分享 123456789987654321 ⋅ 于 2021-06-09 09:02:51 ⋅ 98 阅读

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  指定需要排序的列
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海牛部落-123456789987654321,http://hainiubl.com/topics/75646
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter