复习 逻辑结构 awk 数组 预习sed用法

逻辑结构

1. while ...do ... done , break , continue

while后面的条件为 真 或者 true,循环体就会继续循环,否则终止循环
猜数字
写脚本 :猜数字

#!/bin/bash
X=$(($RANDOM%21))
while [ true ]
do
    read -p "请猜我这个随机数是什么(0-20): " Y
    if [ $Y -eq $X ]
    then
        break
    elif [ $Y -gt $X ]
    then
        echo "大了"
        continue
    else
        echo "小了"
        continue
    fi
done
echo "你猜对了"              

运行脚本

[root@localhost ~]# sh  num.sh
请猜我这个随机数是什么(0-20): 7
小了
请猜我这个随机数是什么(0-20): 14
小了
请猜我这个随机数是什么(0-20): 19
大了
请猜我这个随机数是什么(0-20): 18
大了
请猜我这个随机数是什么(0-20): 17
你猜对了
[root@localhost ~]# 

2. if ...elif...elif...fi

摇骰子猜大小
写脚本

#!/bin/sh
a=0
while [ $a -lt 5 ]
do
read -p "买大买小买定离手:" P

random=$(($RANDOM%6+1))

if   [ "$random" -le "3" ] && [ "$P" == "小" ];then
   echo "开的点数是:$random 恭喜你猜对了"
elif [ "$random" -gt "3" ] && [ "$P" == "大" ];then
   echo "开的点数是:$random 恭喜你猜对了"
elif [ "$random" -le "3" ] && [ "$P" == "大" ];then
   echo "开的点数是:$random 很遗憾猜错了"
elif [ "$random" -gt "3" ] && [ "$P" == "小" ];then
   echo "开的点数是:$random 很遗憾猜错了"
fi            
let a++ 
done

运行

[root@localhost ~]# sh ysz.sh
买大买小买定离手:大
开的点数是:4 恭喜你猜对了
买大买小买定离手:小
开的点数是:6 很遗憾猜错了
买大买小买定离手:大
开的点数是:5 恭喜你猜对了
买大买小买定离手:大
开的点数是:1 很遗憾猜错了
买大买小买定离手:大
开的点数是:6 恭喜你猜对了
[root@localhost ~]# 

3. for ..do..done 嵌套循环

脚本

#!/bin/sh

for X in {1..9}
do
  for Y in {1..9}
  do
    if [ $X == $Y ];then
    break
    fi
  done
  echo "$X$Y"
  echo "----------------"
done

运行

[root@mysql-slave ~]# sh b.sh
11
----------------
22
----------------
33
----------------
44
----------------
55
----------------
66
----------------
77
----------------
88
----------------
99
----------------
[root@mysql-slave ~]# 

4. case...esac

写脚本

#!/bin/sh
n=0
while [ $n -lt 3 ]
do
    read -p "请输入一个常见的状态码,我来给你解释:" X
    case $X in
        "200")
        echo "请求成功"
        ;;
        "400")
        echo "语法错误"
        ;;
        "401")
        echo "请求未经授权"
        ;;
        "403")
        echo "没有权限"
        ;;
        "404")
        echo "资源不存在,路径错误"
        ;;
        "500")
        echo "服务器内部错误"
        ;;
        *)
        echo "我也不知道"
        ;;
    esac
let n++
done

运行

[root@mysql-slave ~]# sh c.sh
请输入一个常见的状态码,我来给你解释:403
没有权限
请输入一个常见的状态码,我来给你解释:9797
我也不知道
请输入一个常见的状态码,我来给你解释:404
资源不存在,路径错误
[root@mysql-slave ~]# 

awk----编程语言

-语法
awk [options] 'commands' filenames
-F 指定分隔符,默认是空白字符

查看进程

[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6 128164  6816 ?        Ss   08:57   0:02 /usr/lib/systemd/
root          2  0.0  0.0      0     0 ?        S    08:57   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:57   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   08:57   0:00 [kworker/0:0H]

写脚本:统计使用的内存

#!/bin/sh
num=0
for X in $(ps aux | awk '{print $6}'| grep -v "RSS")
do
    num=$[ $num + $X ]
done
echo "内存已使用:$num kb"

运行

[root@localhost ~]# sh mem.sh
内存已使用:329216 kb

数组

定义数组

test=(id  name   age  sex)
索引:  0    1      2    3
[root@mysql-slave ~]# echo ${test[3]}
sex

declare 声明关联数组

语法:# declare -A 数组名称

[shark@sharkyun ~]$ declare -A   test

添加值 ,每个值之间用 空格 隔开

[root@mysql-slave ~]# test=(["id"]="2" ["name"]="jack" ["age"]="20")
[root@mysql-slave ~]# echo ${test[age]}
20
[root@mysql-slave ~]# echo ${test[name]}
jack
[root@mysql-slave ~]# test[english]=60
[root@mysql-slave ~]# echo ${test[english]}
60
[root@mysql-slave ~]# echo ${test[*]}
60 jack 20 2
[root@mysql-slave ~]# test=(["chines"]="90")
[root@mysql-slave ~]# echo ${test[*]}
90
[root@mysql-slave ~]# 

获取所有的 索引号:

echo ${!test[*]}

统计数组中有多少个键值对

echo ${#test[*]}

删除索引

 unset test[id]

预习 sed

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑

调用sed 命令的语法:
在命令行指定sed指令对文本进行处理:sed 选项 ‘指令’ 文件

sed的常用选项:
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
-f:后跟保存了sed指令的文件
-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

sed中的编辑命令:
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件

sed命令操作
1.向文件中添加或插入行

sed '3ahello' a.txt #向第三行后面添加hello,3表示行号

[root@localhost ~]# cat a.txt
a
bc
123
def
123 123
kkk
[root@localhost ~]# sed '3ahello' a.txt
a
bc
123
hello
def
123 123
kkk

sed '/123/ateemo' b.txt #向内容123后面添加teemo,如果文件中有多行包括123,则每一行后面都会添加

[root@localhost ~]# cat b.txt
a
bc
123
def
123 123
kkk
[root@localhost ~]# sed '/123/ateemo' b.txt
a
bc
123
teemo
def
123 123
teemo
kkk

sed '$ihello' c.txt #在最后一行之前插入hello

[root@localhost ~]# cat c.txt
a
bc
123
def
123 123
kkk
[root@localhost ~]# sed '$ihello' c.txt   
a
bc
123
def
123 123
hello
kkk

2.更改文件中指定的行

sed '1ckill' d.txt #将文件d.txt的第一行替换为kill

[root@localhost ~]# cat d.txt
a
bc
123
def
123 123
kkk
[root@localhost ~]# sed  '1ckill'  d.txt
kill
bc
123
def
123 123
kkk

3.删除文件中的行

sed '1~2d' f.txt #从第一行开始删除,每隔2行就删掉一行,即删除奇数行

[root@localhost ~]# cat f.txt
a
bc
123
def
123 123
kkk
[root@localhost ~]# sed '1~2d' f.txt
bc
def
kkk

sed '1,3d' f.txt #删除1~3行
sed '1,3!d' f.txt #删除1~3之外的所有行
sed '/123/d' f.txt #删除匹配123的行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容