2021-10-19shell基础(二)

1.变量子串 子串的切片 了解

[root@shell ~]# echo ${name:2:2}

am

[root@shell ~]# echo ${name:2:3}

am

[root@shell ~]# echo ${name:2:4}

am l

2.子串的长度统计 笔试题

第一种统计方式:

[root@shell ~]# echo $name|wc -L

13

第二种统计方式:

[root@shell ~]# expr length "$name"

13

第三种统计方式:

[root@shell ~]# echo $name|awk '{print length}'

13

第四种统计方式:

[root@shell ~]# echo ${#name}

13

统计出长度小于3的字符串

[root@shell ~]# echo I am lizhenya I am 18

I am lizhenya I am 18

[root@shell ~]# echo I am lizhenya I am 18|xargs -n1

I

am

lizhenya

I

am

18

[root@shell ~]# echo I am lizhenya I am 18|xargs -n1|awk '{print length}'

1

2

8

1

2

2

[root@shell ~]# echo I am lizhenya I am 18|xargs -n1|awk '{if(length<3)print}'

I

am

I

am

18

[root@shell ~]# echo I am lizhenya I am 18|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'

I

am

I

am

18

使用for循环方式

[root@shell ~]# cat for.sh

#!/bin/bash

for i in I am lizhenya I am 18

do

echo ${#i}

done

[root@shell ~]# sh for.sh

1

2

8

1

2

2

[root@shell ~]# cat for.sh

#!/bin/bash

for i in I am lizhenya I am 18

do

[ ${#i} -lt 3 ] && echo $i

done

[root@shell ~]# sh for.sh

I

am

I

am

18

子串的删除 支持通配符

1.#从前面往后删除  ## 贪婪匹配

[root@shell ~]# echo ${url#www.}

baidu.com

[root@shell ~]# echo ${url#www.}

baidu.com

[root@shell ~]# echo $url

www.baidu.com

[root@shell ~]# echo ${url#*.}

baidu.com

[root@shell ~]# echo ${url#*.*c}

om

[root@shell ~]# echo ${url#*.*.}

com

[root@shell ~]# echo ${url##*.}

com

2.从后面往前删除

[root@shell ~]# echo $url

www.baidu.com

[root@shell ~]# echo ${url%.*}

www.baidu

[root@shell ~]# echo ${url%.*.*}

www

[root@shell ~]# echo ${url%%.*}

www

3.子串的替换 /替换谁/替换成谁 /// 贪婪替换

[root@shell ~]# echo $url

www.baidu.com

[root@shell ~]# echo ${url/w/W}

Www.baidu.com

[root@shell ~]# echo ${url//w/W}

WWW.baidu.com

[root@shell ~]# echo ${url/www/WWW}

WWW.baidu.com

[root@shell ~]# echo ${url/baidu/sina}

www.sina.com

小结:

子串

统计字符串长度

${#变量}

统计小于3的字符串

子串的切片

${变量:2:2}

子串的删除 ## %%

子串的替换 // ///

2.数值运算

expr  只支持整数运算

[root@shell ~]# expr oldboy

oldboy

[root@shell ~]# expr hehe

hehe

[root@shell ~]# expr 1 + 1

2

[root@shell ~]# expr 1 + 100

101

[root@shell ~]# expr 10 - 10

0

[root@shell ~]# expr 10 * 10

expr: syntax error

[root@shell ~]# expr 10 \* 10

100

[root@shell ~]# expr 10 / 10

1

[root@shell ~]# expr 1 + 1.5

expr: non-integer argument

案例: 判断传入的参数是否为整数

[root@shell scripts]# cat expr.sh

#!/bin/bash

read -p "请输入你的年龄: " age

expr 1 + $age &>/dev/null

[ $? -ne 0 ] && echo "请输入整数" && exit

echo $age

exit指定返回值

[root@shell scripts]# cat expr.sh

#!/bin/bash

read -p "请输入你的年龄: " age

expr 1 + $age &>/dev/null

[ $? -ne 0 ] && echo "请输入整数" && exit 100

echo $age

[root@shell scripts]# sh expr.sh

请输入你的年龄: 20.5

请输入整数

[root@shell scripts]# echo $?

100

$(())  只支持整数运算 注意不要和$()冲突了 执行的命令和``相同

[root@shell scripts]# echo $((10+10))

20

[root@shell scripts]# echo $((10-10))

0

[root@shell scripts]# echo $((10*10))

100

[root@shell scripts]# echo $((10/10))

1

随机数取余数 RANDOM 0-32767之间的数字

[root@shell scripts]# echo $((RANDOM%100+1))

82

$[] 只支持整数运算

[root@shell scripts]# echo $[10+10]

20

[root@shell scripts]# echo $[10-10]

0

[root@shell scripts]# echo $[10/10]

1

[root@shell scripts]# echo $[10*10]

100

[root@shell scripts]# echo $[10**10]

10000000000

let 只支持整数运算

[root@shell ~]# let a=1+1

[root@shell ~]# echo $a

2

[root@shell ~]# let a=1*10

[root@shell ~]# echo $a

10

i++

let i++  =========== let i=i+1

[root@shell ~]# let i=i+1

[root@shell ~]# echo $i

2

[root@shell ~]# let i++

[root@shell ~]# echo $i

3

[root@shell ~]# let i=i+1

[root@shell ~]# echo $i

4

直接运算 ++i i++ 相同 都是自增1

++a

[root@shell ~]# let ++a

[root@shell ~]# echo $a

1

unset 取消变量

在使用变量的情况下两个是有区别

i++ 先赋值在运算

++i 先运算在赋值

[root@shell ~]# a=1

[root@shell ~]# b=1

[root@shell ~]# let i=a++

[root@shell ~]# let c=++b

[root@shell ~]# echo $i

1

[root@shell ~]# echo $c

2

bc 支持整数和小数运算

[root@shell ~]# echo 10+10|bc

20

[root@shell ~]# echo 10+10.5|bc

20.5

[root@shell ~]# echo 10*10.5|bc

105.0

[root@shell ~]# echo 10-10.5|bc

-.5

[root@shell ~]# echo 10/10.5|bc

0

awk

[root@shell ~]# awk 'BEGIN{print 10+10}'

20

[root@shell ~]# echo 10 20|awk '{print $1+$2}'

30

[root@shell ~]# echo 10 20|awk '{print $1*$2}'

200

[root@shell ~]# echo 10 20|awk '{print $1/$2}'

0.5

[root@shell ~]# echo 10 20|awk '{print $1^$2}'

100000000000000000000

运算小结:

expr $(())运算速度快  $[] let bc awk pythonnum

案例: 使用read传参写一个计算器案例  数字做判断 只能是整数

结果输出:

10+20=

10-20=

10*20=

10/20=

[root@shell scripts]# cat count.sh

#!/bin/sh

read -p "请输入两个数字: " num1 num2

expr $num1 + $num2 &>/dev/null

[ $? -ne 0 ] && echo "请输入整数" && exit 50

echo $num1+$num2=$[$num1+$num2]

echo $num1-$num2=$[$num1-$num2]

echo $num1*$num2=$[$num1*$num2]

echo $num1/$num2=$[$num1/$num2]

3.条件表达式

1)文件表达式

语法结构:

第一种:

  test -f /etc/hosts

[root@shell ~]# test -f /etc/hosts && echo "文件存在"

文件存在

[root@shell ~]# test -f /etc/host && echo "文件存在"

[root@shell ~]# test -f /etc/host && echo "文件存在" || echo "文件不存在"

文件不存在

[root@shell ~]# test -f /etc/hosts && echo "文件存在" || echo "文件不存在"

文件存在

第二种: 常用

  [ -f /etc/hosts ] # 判断是否为普通文件

  [ -d  file ]  # 文件存在并且为目录

  [ -e  file ]  #  文件存在则为真

  [ -r  file ]  #  文件可读则为真

  [ -w  file ]  #  文件可写则为真

  [ -x  file ]  #  文件可执行则为真


[root@shell ~]# [ -f /etc/passwd ] && echo "文件存在" || echo "文件不存在"

文件存在

[root@shell ~]# [ -f /etc/passwdddd ] && echo "文件存在" || echo "文件不存在"

文件不存在

[root@shell ~]# [ -d /etc/passwd ] && echo "文件存在" || echo "文件不存在"

文件不存在

[root@shell ~]# [ -d /etc/ ] && echo "文件存在" || echo "文件不存在"

文件存在

[root@shell ~]# [ -x /etc/ ] && echo "文件存在" || echo "文件不存在"

文件存在

[root@shell ~]# ll -d /etc

drwxr-xr-x. 79 root root 8192 Oct 19 09:14 /etc

[root@shell ~]# [ -e /etc/ ] && echo "文件存在" || echo "文件不存在"

文件存在

[root@shell ~]# [ -w /etc/hosts ] && echo "文件存在" || echo "文件不存在"

文件存在

注意: 表达式中支持变量和命令

[root@shell ~]# dir=/tmp

[root@shell ~]#

[root@shell ~]# [ -d $dir ] && echo "文件存在" || echo "文件不存在"

文件存在

[root@shell ~]# dir=/tmppppp

[root@shell ~]# [ -d $dir ] && echo "文件存在" || echo "文件不存在"

文件不存在

[root@shell ~]# ls -d /etc/sysconfig/

/etc/sysconfig/

[root@shell ~]# [ -d `ls -d /etc/sysconfig/` ] && echo "文件存在" || echo "文件不存在"

文件存在

案例:

1. -d

[root@shell ~]# [ -d ${name}_$ip ] || mkdir ${name}_$ip

2. -f 案例 functions shell脚本的函数库

[root@shell ~]# [ -f /etc/init.d/functions ]

判断函数库是否存在 存在则加载

[root@shell ~]# [ -f /etc/init.d/functions ] && . /etc/init.d/functions

[root@shell scripts]# cat ping.sh

#!/bin/sh

[ -f /etc/init.d/functions ] && . /etc/init.d/functions

ping -c1 -W1 $1 &>/dev/null

[ $? -eq 0 ] && action "ping $1 is.." /bin/true || action "ping $1 is.." /bin/false

[root@shell scripts]# sh ping.sh www.baidu.com

ping www.baidu.com is..                                    [  OK  ]

[root@shell scripts]# sh ping.sh www.baidu.commmmmm

ping www.baidu.commmmmm is..    [FAILED]

2)数值比较

语法结构

第一种:

      test  整数1 比较符 整数2

第二种:

      [ 整数1 比较符 整数2 ]


比较符

INTEGER1 -eq INTEGER2  相等        -eq

INTEGER1 -ge INTEGER2  大于或者等于 -ge  

INTEGER1 -gt INTEGER2 大于        -gt

INTEGER1 -le INTEGER2 小于或者等于 -le

INTEGER1 -lt INTEGER2 小于     -lt

INTEGER1 -ne INTEGER2 不等于      -ne

[root@shell ~]# test 10 -eq 10 && echo 成立 || echo 不成立

成立

[root@shell ~]# test 10 -ne 10 && echo 成立 || echo 不成立

不成立

[root@shell ~]# test 10 -ne 5 && echo 成立 || echo 不成立

成立

[root@shell ~]# [ 10 -eq 10 ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ 10 -ne 10 ] && echo 成立 || echo 不成立

不成立

[root@shell ~]# [ 15 -ne 10 ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ 15 -gt 10 ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ 10 -ge 10 ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ 10 -le 10 ] && echo 成立 || echo 不成立

成立

支持命令

[root@shell ~]# [ 50 -gt `echo $((RANDOM%100))|tee file.txt` ] && echo "成立" || echo 不成立

成立

[root@shell ~]# cat file.txt

20

[root@shell ~]# [  20 -eq `cat /etc/passwd|wc -l` ]

[root@shell ~]# echo $?

0

案例1:统计磁盘使用率 如果大于80%则发送邮件 否则输出当前的使用率正常

1.查看磁盘使用率

df -h 取行

[root@shell ~]# df -h|awk 'NR==6'

/dev/sda3        18G  1.9G  16G  11% /

[root@shell ~]# df -h|grep /dev/sda3

/dev/sda3        18G  1.9G  16G  11% /

[root@shell ~]# df -h|grep /$

/dev/sda3        18G  1.9G  16G  11% /

[root@shell ~]# df -h|sed -n '/\/$/p'

/dev/sda3        18G  1.9G  16G  11% /

[root@shell ~]# df -h|awk '/\/$/'

/dev/sda3        18G  1.9G  16G  11% /

取到百分比

[root@shell ~]# df -h|awk '/\/$/'|awk '{print $(NF-1)}'

11%

和我们的值进行比较 test []

写入脚本

[root@shell scripts]# cat disk.sh

#!/bin/sh

use_disk=`df -h|awk '/\/$/'|awk '{print $(NF-1)}'`

[ ${use_disk%\%} -gt 10 ] && echo "send mail......" || echo "磁盘使用率正常 当前使用率为: $use_disk"

案例2: 内存使用百分比 大于5报警 小于5输出正常值

统计百分比

[root@shell ~]# free|awk 'NR==2{print $3/$2*100}'

8.49266

案例3: 统计负载 如果大于1则报警 小于则输出正常值 1分钟的平均值 使用dd压测到1以上进行测试

练习题awk

统计出当前系统的主机名称 IP地址 虚拟平台 外网IP地址 Linux系统版本 内核版本 磁盘使用率 内存使用率

输出到屏幕上

系统主机名: shell

ip地址为: 10.0.0.7

外网IP地址: 125.33.245.251

。。。。

。。。。

整数比较案例 输入两个数字进行比对 大于 等于 小于

[root@shell scripts]# cat diff.sh

#!/bin/sh

[ $1 -gt $2 ] && echo "$1>$2"

[ $1 -lt $2 ] && echo "$1<$2"

[ $1 -eq $2 ] && echo "$1=$2"

[root@shell scripts]# sh diff.sh 20 30

20<30

[root@shell scripts]# sh diff.sh 20 10

20>10

[root@shell scripts]# sh diff.sh 20 20

20=20

死循环

[root@shell scripts]# cat diff.sh

#!/bin/sh

while true

do

read -p "请输入两个整数: " num1 num2

expr $num1 + $num2 &>/dev/null

[ $? -ne 0 ] && echo "请输入整数" && exit 2

[ $num1 -gt $num2 ] && echo "$num1>$num2"

[ $num1 -lt $num2 ] && echo "$num1<$num2"

[ $num1 -eq $num2 ] && echo "$num1=$num2"

done

多整数比较

语法结构:

    [ 整数1 比较符 整数2 ]

-o  or 或者 -a and并且

[ 整数1 比较符 整数2 -o 整数1 比较符 整数2 -o 整数1 比较符 整数2 ]

[root@shell ~]# [ 10 -eq 10 -o 10 -gt 20 -o 20 -lt 10 ] && echo "成立" ||echo "不成立"

成立

[root@shell ~]# [ 10 -eq 10 -a 10 -gt 20 -o 20 -lt 10 ] && echo "成立" ||echo "不成立"

不成立

[root@shell ~]# [ 10 -eq 10 -a 10 -gt 20 -o 2 -lt 10 ] && echo "成立" ||echo "不成立"

成立

支持正则 [[]]  && 并且 || 或者

[root@shell ~]# [[ 10 -eq 10 && 10 -gt 5 ]] && echo "成立" ||echo "不成立"

成立

[root@shell ~]# [[ 10 -eq 20 && 10 -gt 5 ]] && echo "成立" ||echo "不成立"

不成立

[root@shell ~]# [[ 10 -eq 20 || 10 -gt 5 ]] && echo "成立" ||echo "不成立"

成立

案例:反向破解随机数 通过MD5值破解出对应的数字

[root@shell ~]# echo $RANDOM|md5sum |cut -c1-8

2d8a8c96

[root@shell ~]# echo $RANDOM|md5sum |cut -c1-8

caae07ff

[root@shell ~]# echo $RANDOM|md5sum |cut -c1-8

1d93122c

[root@shell ~]# echo $RANDOM|md5sum |cut -c1-8

a29fff57

字符串比对

语法结构:

    test user = user

[ "user" = "user" ]

[root@shell ~]# [ "root" = "root" ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ "roo" = "root" ] && echo 成立 || echo 不成立

不成立

[root@shell ~]# [ ! "roo" = "root" ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ $USER = "root" ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ root = root -a user = user ]

[root@shell ~]# [ root = root -a user = user ] && echo 成立 || echo 不成立

成立

[root@shell ~]# [ oot = root -a user = user ] && echo 成立 || echo 不成立

不成立

[root@shell ~]# [ oot = root -o user = user ] && echo 成立 || echo 不成立

成立

[root@shell ~]# AAA=""

[root@shell ~]# [ -z $AAA ] && echo 成立 || echo 不成立

成立

[root@shell ~]# AAA="aaa"

[root@shell ~]# [ -z $AAA ] && echo 成立 || echo 不成立

不成立

[root@shell ~]# [ -n $AAA ] && echo 成立 || echo 不成立

成立

案例: 传参不允许字符串为空

[root@shell scripts]# cat hostname.sh

#!/bin/bash

#修改主机名称

read -p "输入主机名称: " name

[ -z $name ] && echo "必须输入名称" && exit

三个判断

1.以返回结果判断      $?

2.判断数字是否为整数  expr

3.判断字符串不允许为空 -z

4.使用正则判断数字是否为整数 [[ $num =~ ^[0-9]+$ ]]

[root@shell scripts]# cat ping.sh

#!/bin/sh

[ -f /etc/init.d/functions ] && . /etc/init.d/functions

while true

do

read -p "请输入一个ip或url地址: " url

        [ $url = exit -o $url = q ] && exit

ping -c1 -W1 $url &>/dev/null

re=$?

[ -z $url ] && echo "必须传一个url地址" && exit

[ $re -eq 0 ] && action "ping $url is.." /bin/true || action "ping $url is.." /bin/false

done

正则比对

[root@shell ~]# [[ root =~ ^r ]] && echo 成立 || echo 不成立

成立

[root@shell ~]# [[ root =~ t$ ]] && echo 成立 || echo 不成立

成立

[root@shell ~]# [[ $USER =~ t$ ]] && echo 成立 || echo 不成立

成立

[root@shell ~]# AAA="BBB"

[root@shell ~]# [[ $AAA =~ ^[A-Z]+ ]]

[root@shell ~]# [[ $AAA =~ ^[A-Z]+ ]] && echo 成立 || echo 不成立

成立

[root@shell ~]# AAA="BB1B"

[root@shell ~]# [[ $AAA =~ ^[A-Z]+ ]] && echo 成立 || echo 不成立

成立

[root@shell ~]# [[ $AAA =~ ^[A-Z]+$ ]] && echo 成立 || echo 不成立

不成立

[root@shell ~]# AAA="BBAB"

[root@shell ~]# [[ $AAA =~ ^[A-Z]+$ ]] && echo 成立 || echo 不成立

成立

[root@shell ~]# [[ $AAA =~ ^[A-Za-z]+$ ]] && echo 成立 || echo 不成立

成立

案例:

[root@shell ~]# cat name.sh

#!/bin/sh

read -p "请输入你的姓名:[A-Za-z] " name

[[  ! $name =~ ^[A-Za-z]+$ ]] && echo "必须严格按照规范来写" && exit

echo $name

[root@shell ~]# cat name.sh

#!/bin/sh

read -p "请输入你的姓名:[A-Za-z] " name

[[  ! $name =~ ^[A-Za-z]+$ ]] && echo "必须严格按照规范来写" && exit

echo $name

read -p "请输入你的年龄:[0-9] " age

[[  ! $age =~ ^[0-9]+$ ]] && echo "必须严格按照规范来写你的年龄" && exit

echo $age

[root@shell ~]# sh name.sh

请输入你的姓名:[A-Za-z] oldboy

oldboy

请输入你的年龄:[0-9] 1000

1000

小结:

子串知识:

子串的切片

echo ${name:2:2}

长度统计

echo ${#name}

长度统计小于3的

for i in I am lizhenya I am 18

do

    [ ${#i} -lt 3 ] && echo $i

done

echo I am lizhenya I am 18|xargs -n1|awk '{if(length<3)print }'

echo I am lizhenya I am 18|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'

子串的删除  ## 贪婪匹配  %% 贪婪匹配

url=www.baidu.com

echo ${url#*.}

echo ${url%.*}

替换 /// 贪婪替换

echo ${url/www/news}

数值运算

expr

$(())

$[]

let

bc

awk

计算器

条件表达式 取反加!

文件判断

-f -d -e -r -x -w

-d 判断目录

-f functions 函数库 action 输出 /bin/true /bin/false

整数比较

-gt

-lt

-ge

-le

-ne

-eq

内存使用率

磁盘使用率

平均1分钟负载大于1

练习awk案例

多整数比较 -o -a

字符串比对

[ "$USER" = "root" ]

-z  为0为真

-n  不为空则为真

正则比对

[[ $USER =~ ^r ]]

[[ $USER =~ ^[A-Za-z]+$ ]]

[[ $USER =~ ^[0-9]+$ ]]

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

推荐阅读更多精彩内容

  • Day28 作者:方维超 归档:课堂笔记 时间:2019/4/9 老男孩教育教学核心思想6重:重目标、重思路、重方...
    Ffvc阅读 307评论 0 1
  • 一、shell脚本介绍 1.1 开头(环境使用shebang机制) #!/bin/bash 必须写在文件首行 符号...
    优果馥斯阅读 3,282评论 0 1
  • Shell编程3小时光速入门 因为Web集群架构会用到Shell编程基础,提前讲。 跟老男孩学Linux运维:Sh...
    寻找着光辉阅读 139评论 0 0
  • 1、为什么要学习Shell编程? Linux系统中会大量的使用Shell,工作中我们也需要自动化实现业务, 例如:...
    将就灬阅读 172评论 0 0
  • 什么是linux linux可以为我们做什么 打游戏下软件听音乐 系统服务器 连接Internet 网络使用lin...
    帅碧阅读 974评论 1 6