shell

目录

一.运行方式

二.编程习惯

三.变量

3.1变量的命名

3.3普通变量(局部变量)

3.4特殊变量

3.5变量子串

3.6变量赋值

四.运算方式

4.1$((    ))

4.2let

4.3expr

4.4bc(小数运算)

4.5$[ ]

4.6awk

4.7总结运算方式

五.条件测试语句

5.1文件

5.2条件测试表达式

5.3字符串

六.条件语句

七.循环

7.1while

7.2exit 和continue

7.3for循环

7.3.1带列表的for循环语句

7.3.2不带列表的for循环语句

7.3.3类C风格的for循环语句

八.正则表达式

8.1基础正则

8.2扩展正则

九.三剑客

9.1grep

9.2sed

9.2.1sed-查找p

9.2.2sed-删除d

9.2.3sed-增加cai

9.3awk

9.3.1特点与应用场景

9.3.2行与列

9.3.3正则

9.3.4范围

9.3.5特殊模式BEGIN{}和END{}

9.3.6awk数组

9.3.7awk for循环

9.3.8awk if判断


一.运行方式

方式一方式二方式三方式四方式五
sh test.shbash test.sh

chmod a+x

./test.sh

. test.shsource test.sh

二.编程习惯

  • 在脚本中尽量不用中文
  • 脚本名见名知意
  • 编写流程控制语句时,先将结构写出来

三.变量

3.1变量的命名

  • 变量不能以数字开始
  • 多个单词通过_连接

3.2环境变量(全局变量)

系统定义的变量,用大写字母表示

PATH:当你输入一个命令时,系统会在PATH中定义的目录中查找该命令的可执行文件
HOME:指定当前用户的主目录路径
USER:当前用户的用户名

查看环境变量:echo $PATH

3.3普通变量(局部变量)

定义示例:变量名=变量值

注意:变量名和值之间没有空格

示例:
        a="中国"

3.4特殊变量

$0脚本的名称

$n

脚本的第几个参数
$#脚本的参数个数
$*取出所有的参数,添加双引号时,整个整体作为一个参数
$@取出所有的参数,添加双引号时,每个参数作为独立的参数
$?
前一个命令的返回状态码  $?=0 ==>成功执行前一条命令,$?!=0反之
$$
返回本程序的进程 ID PID ),不常用
$!
获取上一个在后台工作的进程的进程号,不常用
$_
保存之前执行的命令的最后一个参数,不常用

注意:当$n中n>=10时,需改成${10},${11}的形式

3.5变量子串

统计字符数方法:

方式一:
[root@serverc ~]# name="mkhfe"
[root@serverc ~]# echo $name
mkhfe
[root@serverc ~]# echo ${#name}
5

方式二:
[root@serverc ~]# echo $name | wc -L
5

方式三:
[root@serverc ~]# echo $name | awk '{print length()}'
5



子串截取:

方式一:
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5}    #从指定位置截取到末尾
f jhy
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5:3} #从指定位置截取到指定的长度位置
f j

方式二:
[root@serverc ~]# echo $text | cut -c 1-4
huek

3.6变量赋值

1.直接赋值
var=a
2.引用其他命令结果赋值
ip=`date'
或
ip=$(date)
3.交互式变量赋值
read -p "a number" number
4.脚本传参赋值
$1 $2 $3

四.运算方式

4.1$((    ))

[root@serverc ~]# c=$((1+2))
[root@serverc ~]# echo $c
3

4.2let

[root@serverc ~]# let c=1+2
[root@serverc ~]# echo $c
3

4.3expr

[root@serverc ~]# expr 1 + 2
3

[root@serverc ~]# expr 1 \* 2
2

注意:

  • 乘法运算时需要加转义符,因为*会被识别为通配符
  • 运算的符号两边存在一个空格

4.4bc(小数运算)

[root@serverc ~]# echo 4/3 |bc -l
1.33333333333333333333

4.5$[ ]

[root@serverc ~]# echo $[1+2]
3

4.6awk

[root@serverc ~]# awk 'BEGIN{print 1/3 3/7}'
0.3333330.428571


#传参方式
[root@serverc ~]# x=1
[root@serverc ~]# y=2
[root@serverc ~]# awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
3

4.7总结运算方式

bc, awk可用于小数运算,其余方式只能进行整数运算

五.条件测试语句

5.1文件

[root@serverc ~]# [ -d /etc ];echo $?
0

[root@serverc ~]# [ -f /etc/hosts ];echo $?
0

[root@serverc ~]# [ -e /etc/passwd ];echo $?
0

5.2条件测试表达式

[ "$num" -eq 1 ] && {
echo 1
exit 0
}

[ "$num" -eq 2 ] && {
echo 2
exit 0
}

5.3字符串

[ "name"="root" ]||{
        echo "you are not root"
        exit 1
}

六.条件语句

case "$1" in
    [a-z])
        echo "Lowercase letter."
        ;;
    [A-Z])
        echo "Uppercase letter."
        ;;
    [0-9])
        echo "Number."
        ;;
    *)
        echo "Other type."
        ;;
esac

七.循环

7.1while

7.2exit 和continue

7.3for循环

7.3.1带列表的for循环语句

7.3.2不带列表的for循环语句

7.3.3C风格的for循环语句

八.正则表达式

8.1基础正则

1)^  以......开头的行

  •   ^root 以root开头的行

2)$  以......结尾的行

  •   448¥ 以448结尾的行

3^$ 表示空行,不是空格

排除文件中的空行:

4).(点) 任意一个字符

注意:不匹配空行

匹配文件以.结尾的行:

6)*前一个字符连续出现0次或0次以上

7).* 所有内容

8) [ ]   [abc] 1次匹配1个字符, 匹配任何一一个字符(a或b或c)

匹配文件中的大小字母及数字:

总结:

●[] 里面的内容去掉特殊含义
●[a-z |A-Z|0-9]匹配大小写字母和数字,匹配|
 

9)[^] [^abc] 取反,排除排除a或b或c的内容, 匹配a或b或c之外的内容

8.2扩展正则

1) + 前一个字符出现一次或一次以上

2) | 或者

[ ] 与 |

3) ( ) 被括起来的内容表示一个整体

4) {} 连续出现o{n,m} 前一个字母o,至少连续出现n次,最多连续出现m次

5)?  连续出现  前一个字符出现0次或1次

扩展正则总结:

九.三剑客

9.1grep

-A:

-c:

-w:

-v:

9.2sed

sed格式:

sed命令功能:增删改查

sed执行过程:找到某一行,进行增删改查

9.2.1sed-查找p

指定行号:

指定行号范围:

从某一行到最后一行:

里面的$表示最后一行

过滤:

范围过滤:

9.2.2sed-删除d

用法同查找

企业案例:删除文件中的空行和包含#的行

法一:

法二:

!的妙用:

9.2.3sed-增加cai

9.3awk

9.3.1特点与应用场景

awk内置变量:

9.3.2行与列

1)取行

2)取列

        ●-F指定分隔符指定每一 -列结束标记(默认是空格,,连续的空格,tab键)
        ●$数字取出某一列,注意:在awk中$内容- -个意思表示取出某- -列
        ●$0整行的内容,
        ●{print xxX}
        ●$NF表示最后- -列

9.3.3正则

  • ~:包含
  • !~:不包含

9.3.4范围

  • /开始/,/结束/

9.3.5特殊模式BEGIN{}和END{}

END{}统计计算:

统计/etc/services里面有多少空行:

#seq 100 求和1+2+3+...+100 awk实现

9.3.6awk数组

9.3.7awk for循环

9.3.8awk if判断

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值