Error[8]: Undefined offset: 123, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

什么是shell脚本?

shell:是完成一些稍微复杂的需求(靠linux命令解决不了)与完成一些重复性 *** 作

shell脚本从上往下依次运行,如果中间出现错误,会接着运行服务器巡检,写shell脚本,zabbix(一个对服务期各项数据进行统计的图形界面软件)

         重定向(覆盖|删除)

                >正确重定向覆盖

                >>正确重定向追加

                2>错误重定向覆盖

                2>>错误重定向追加

                &>混合重定向覆盖

                &>>混合重定向追加

                bash dgf.sh > /root/dgf.log  2>&1
                bash dgf.sh &> /root/dgf.log  
                #####这两个追加是同一个性质
                变量名=变量值

                    name =dgf如果想查看name的值:echo "$name"

                 引号:

                     双引号:弱引用,会将变量所对应的值打印

                     单引号:强引用,单引号中的内容是什么,就打印什么

                      三引号:批量写入内容,例如:cat << EDH > haha

                                                                                                hahahahahah

                                                                                                 EDH

                 $符号的引用: !#/bin/bash for i in {1..5} #循环五次 do for x in {1..5} #变量名x循环五次 do if [ $i -le $x ]; then echo -n "x"; fi #如果$i 小于等于 $x 就输出*号,-n 就是不换行输出 done echo " " #输出空行,相当于回车换行 done
$@位置变量的内容是单个的
$*显示变量内容。整体的,不换行的
$$显示此文件的进程号
$#有显示此文件后面的变量数量
$? 上一条命令的返回结果
脚本本身的名称
                脚本1:将*号按照循序排列开来,效果:*

                                                                                        **

                                                                                        ***

                                                                                        ****

                                                                                        *****

#!/bin/bash
for x in {1..9}
    do
    for y in {1..9}
        do
        if [ $y -le $x ]; then echo -n "  $y X $x = $(expr $y \* $x)"; fi
    done 
    echo " "
done
                脚本2:将文字按照9 9乘法表的方式排开
#!/bin/bash
for ((i=0;i<3;i++))
do
    i=1
    echo "无限循环中"
done
                脚本3:测试主机是否存活
#!/bin/bash
for i in 192.168.100.{1..254};
   do  ping -c1 -w 1ms $i &> /dev/null
       if[ $? -eq 0 ];then echo "$i存活"
       fi
done
                脚本4:for的两次无限循环、
#!/bin/bash
#问:有若干只兔和鸡,兔和鸡加起来一共有100条腿,请写一个简单的shell,算出兔和鸡各多少只可能组合(假设所有的兔和鸡的腿都是健全的,且兔和鸡至少
为1只)
for tu in {1..25}
do
  for ji in {1..50}
  do
        if [ $(expr $(expr 4 \* $tu ) + $(expr 2 \* $ji )) -eq 100 ];then echo "兔:$tu ;鸡:$ji";fi

  done
done
碰到了一个面试题:
主要是用来分析|处理|修改配置文件及查看一些配置
正则表达式:

        什么是正则表达式?

            正则表达式是检查字符串中是否含有特定字符,一般是以行为单位检查, 就相当于如果这一行中有指定的字符,就将这一行都输出出来,正则表达式中也有很多的特殊符号用来进行快捷选择,正则符解释

        正则表达式的种类?

        一个是基本正则表达式

正则符

^
代表开头,以谁开头$
^$

代表结尾,以谁结尾

代表空格,空行.
任意一个单字符*
重复前面的字符0次到多次*.
所有字符串(任意长度,任意字符)\
转义符,例如:\.  将点转为普通字符 匹配前面的字符出现n次  例:grep "do \{3\}g" hehe.txt

\{n\}

\{n,\}
匹配前面的字符最少几次\{,n\}
匹配前面字符最多几次\{n,m\}
匹配前面字符最少几次,最多几次[  ]
匹配包含其中的任意一个字符[ ^]
不匹配包含其中的任意一个字符扩展正则解释

        一个是扩展正正则表达式

        

grep命令:

扩展正则符

grep -E||egrep
必须使用-E ,或者egrep不然就会报错+
前边的字符最少出现1次
前边的字符最多出现1次 例:grep -E "go?d" 123.txt()
匹配包含括号中的内容

        正则表达式三剑客(grep,sed,awk)

                对文件中的内容逐行过滤,查到有特殊字符的行1.查看文件时显示行号

[root@localhost ~]# grep -n "goood" 123.txt 输出:13:goood [root@localhost ~]# cat -n 123.txt 1 11 123 2 22 1234 3 11 431 4 23 43121 5 444 4312 6 444 4321 7 22 54321 8 111 2143 9 1q 10 ·:“··1 2134 11 god 12 good 13 goood 14 gooood 15 goooood 16 gooooood 17 goooooood  

[root@localhost ~]# grep -c "11" 123.txt 
3

2.查看指定字符在文件中出现几次

[root@localhost ~]# grep -v "root" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

3.不要查看root在文件/etc/passwd

  4.输出指定字符的上一行与下一行

[root@localhost ~]# grep -A1 "good" 123.txt #显示上一行 good goood [root@localhost ~]# grep -B1 "good" 123.txt #显示下一行 god good [root@localhost ~]# grep -C1 "good" 123.txt #显示指定字符的上下两行 god good goood

-n

5.总结:

                        grep 

                sed命令:
查看文件时可以显示行号-v
查看文件时,不要查看指定字符-c
统计特殊字符在文件中出现的次数-A
查看指定字符和它的上一行-B
查看指定字符和它的下一行-C
查看指定字符和它的上下两行

是用来非交互的方式,增删改查文件1.查看文件1~3行:

[root@localhost ~]# sed -n "1,3"p 123.txt 11 123 22 1234 11 431

[root@localhost ~]# sed -n "1p;3p" 123.txt 
11 123
11 431
[root@localhost ~]# sed -n -e1p -e3p 123.txt #查看1行和3行 -e执行多个任务
11 123
11 431

2.查看文件中的1行和3行:

 3.查看所有文件中god的行

[root@localhost ~]# sed -n '/god/p' 123.txt god

4.替换文件中的字符

[root@localhost ~]# sed -i 's/o/a/g' 123.txt [root@localhost ~]# cat 123.txt gad gaad gaaad gaaaad gaaaaad gaaaaaad gaaaaaaad

[root@localhost ~]# sed -i '3s/^/#/g' 123.txt 
[root@localhost ~]# cat 123.txt 
11 123
22 1234
#11 431
23 43121
444 4312
444 4321
22 54321 
111 2143
1q
·:“··1 2134
gad
gaad
gaaad
gaaaad
gaaaaad
gaaaaaad
gaaaaaaad

5.在第三行添加#号

[root@localhost ~]# sed -i '3i hello,world' 123.txt 
[root@localhost ~]# cat 123.txt 
11 123
22 1234
hello,world
#11 431
23 43121
444 4312
444 4321
22 54321 
111 2143
1q
·:“··1 2134
gad
gaad
gaaad
gaaaad
gaaaaad
gaaaaaad
gaaaaaaad

6.将文件第三行强行差入一个hello,world

[root@localhost ~]# sed -i '7a hello,world' 123.txt 
[root@localhost ~]# cat 123.txt 
11 123
22 1234
hello,world
#11 431
23 43121
444 4312
444 4321
hello,world
22 54321 
111 2143
1q
·:“··1 2134
gad
gaad
gaaad
gaaaad
gaaaaad
gaaaaaad
gaaaaaaad

7.将hello,world,插入第七行下方

              awk命令:

一. SORT的解释单纯的,SORT依照开头字符,默认为升序

        对文件中的命令进行排序(sort),统计(uniq),分割(cut).

-u

[root@localhost ~]# cat 1234.txt 11 1 12 2 15 7 14 4 13 6 19 5 17 3 [root@localhost ~]# sort -k2 -t " " 1234.txt 11 1 12 2 17 3 14 4 19 5 13 6 15 7
去除重复行-r
依照开头字符,排列的降序-o
输出到另一个文件-m
将文件中的文本合并并输出-n
将文件中的字符,数字,合成一个整体进行排序-t

分隔符,配合-k可以进行对第""列进行排序   就像awk ,-t " " 以空格为分隔符

例如:

uniq  文件名

2.UNIQ文件名,去掉连续重复的内容

去掉连续重复的内容-u        
去掉重复内容-c
统计连续出现的次数cut

3.CUT命令详解(cut是纵向处理)

    (1).

-b
字节(每个汉字为3个字节,没个英文为1按字节)-c
字段(每个汉字为一字段,每个英文单词为一字段)-f
字符(每个字符为一个整体,空格隔开的就为另一个整体)N

  (2).表示范围的方法还有:

[root@localhost ~]# cat 123.txt 11 123 22 1234 hello,world 11 123 23 43121 444 4312 444 4321 hello,world 22 54321 111 2143 1q ·:“··1 2134 gad gaad gaaad gaaaad gaaaaad gaaaaaad gaaaaaaad 郭子林 [root@localhost ~]# cut -b1-3 123.txt #-b 字节 #1-3从一字节到3字节 11 22 hel 11 23 444 444 hel 22 111 1q · gad gaa gaa gaa gaa gaa gaa 郭
只有第N项N-
从第N项一直到行尾巴-M
从行首一直到M(包括M)N-M
从第N行开始到M项(包括M)--output-delimiter=$'\n'
换行符

例如:

[root@localhost ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -1 /etc/passwd |cut -d ":" -f 1,6,7 --output-delimiter=$'\n'
root
/root
/bin/bash

又一个例子:

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
shell的一些基础(待补充)_java_内存溢出

shell的一些基础(待补充)

shell的一些基础(待补充),第1张

什么是shell脚本?

shell:是完成一些稍微复杂的需求(靠linux命令解决不了)与完成一些重复性 *** 作

shell脚本从上往下依次运行,如果中间出现错误,会接着运行服务器巡检,写shell脚本,zabbix(一个对服务期各项数据进行统计的图形界面软件)

         重定向(覆盖|删除)

                >正确重定向覆盖

                >>正确重定向追加

                2>错误重定向覆盖

                2>>错误重定向追加

                &>混合重定向覆盖

                &>>混合重定向追加

                bash dgf.sh > /root/dgf.log  2>&1
                bash dgf.sh &> /root/dgf.log  
                #####这两个追加是同一个性质
                变量名=变量值

                    name =dgf如果想查看name的值:echo "$name"

                 引号:

                     双引号:弱引用,会将变量所对应的值打印

                     单引号:强引用,单引号中的内容是什么,就打印什么

                      三引号:批量写入内容,例如:cat << EDH > haha

                                                                                                hahahahahah

                                                                                                 EDH

                 $符号的引用: !#/bin/bash for i in {1..5} #循环五次 do for x in {1..5} #变量名x循环五次 do if [ $i -le $x ]; then echo -n "x"; fi #如果$i 小于等于 $x 就输出*号,-n 就是不换行输出 done echo " " #输出空行,相当于回车换行 done
$@位置变量的内容是单个的
$*显示变量内容。整体的,不换行的
$$显示此文件的进程号
$#有显示此文件后面的变量数量
$? 上一条命令的返回结果
脚本本身的名称
                脚本1:将*号按照循序排列开来,效果:*

                                                                                        **

                                                                                        ***

                                                                                        ****

                                                                                        *****

#!/bin/bash
for x in {1..9}
    do
    for y in {1..9}
        do
        if [ $y -le $x ]; then echo -n "  $y X $x = $(expr $y \* $x)"; fi
    done 
    echo " "
done
                脚本2:将文字按照9 9乘法表的方式排开
#!/bin/bash
for ((i=0;i<3;i++))
do
    i=1
    echo "无限循环中"
done
                脚本3:测试主机是否存活
#!/bin/bash
for i in 192.168.100.{1..254};
   do  ping -c1 -w 1ms $i &> /dev/null
       if[ $? -eq 0 ];then echo "$i存活"
       fi
done
                脚本4:for的两次无限循环、
#!/bin/bash
#问:有若干只兔和鸡,兔和鸡加起来一共有100条腿,请写一个简单的shell,算出兔和鸡各多少只可能组合(假设所有的兔和鸡的腿都是健全的,且兔和鸡至少
为1只)
for tu in {1..25}
do
  for ji in {1..50}
  do
        if [ $(expr $(expr 4 \* $tu ) + $(expr 2 \* $ji )) -eq 100 ];then echo "兔:$tu ;鸡:$ji";fi

  done
done
碰到了一个面试题:
主要是用来分析|处理|修改配置文件及查看一些配置
正则表达式:

        什么是正则表达式?

            正则表达式是检查字符串中是否含有特定字符,一般是以行为单位检查, 就相当于如果这一行中有指定的字符,就将这一行都输出出来,正则表达式中也有很多的特殊符号用来进行快捷选择,正则符解释

        正则表达式的种类?

        一个是基本正则表达式

正则符

^
代表开头,以谁开头$
^$

代表结尾,以谁结尾

代表空格,空行.
任意一个单字符*
重复前面的字符0次到多次*.
所有字符串(任意长度,任意字符)\
转义符,例如:\.  将点转为普通字符 匹配前面的字符出现n次  例:grep "do \{3\}g" hehe.txt

\{n\}

\{n,\}
匹配前面的字符最少几次\{,n\}
匹配前面字符最多几次\{n,m\}
匹配前面字符最少几次,最多几次[  ]
匹配包含其中的任意一个字符[ ^]
不匹配包含其中的任意一个字符扩展正则解释

        一个是扩展正正则表达式

        

grep命令:

扩展正则符

grep -E||egrep
必须使用-E ,或者egrep不然就会报错+
前边的字符最少出现1次
前边的字符最多出现1次 例:grep -E "go?d" 123.txt()
匹配包含括号中的内容

        正则表达式三剑客(grep,sed,awk)

                对文件中的内容逐行过滤,查到有特殊字符的行1.查看文件时显示行号

[root@localhost ~]# grep -n "goood" 123.txt 输出:13:goood [root@localhost ~]# cat -n 123.txt 1 11 123 2 22 1234 3 11 431 4 23 43121 5 444 4312 6 444 4321 7 22 54321 8 111 2143 9 1q 10 ·:“··1 2134 11 god 12 good 13 goood 14 gooood 15 goooood 16 gooooood 17 goooooood  

[root@localhost ~]# grep -c "11" 123.txt 
3

2.查看指定字符在文件中出现几次

[root@localhost ~]# grep -v "root" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

3.不要查看root在文件/etc/passwd

  4.输出指定字符的上一行与下一行

[root@localhost ~]# grep -A1 "good" 123.txt #显示上一行 good goood [root@localhost ~]# grep -B1 "good" 123.txt #显示下一行 god good [root@localhost ~]# grep -C1 "good" 123.txt #显示指定字符的上下两行 god good goood

-n

5.总结:

                        grep 

                sed命令:
查看文件时可以显示行号-v
查看文件时,不要查看指定字符-c
统计特殊字符在文件中出现的次数-A
查看指定字符和它的上一行-B
查看指定字符和它的下一行-C
查看指定字符和它的上下两行

是用来非交互的方式,增删改查文件1.查看文件1~3行:

[root@localhost ~]# sed -n "1,3"p 123.txt 11 123 22 1234 11 431

[root@localhost ~]# sed -n "1p;3p" 123.txt 
11 123
11 431
[root@localhost ~]# sed -n -e1p -e3p 123.txt #查看1行和3行 -e执行多个任务
11 123
11 431

2.查看文件中的1行和3行:

 3.查看所有文件中god的行

[root@localhost ~]# sed -n '/god/p' 123.txt god

4.替换文件中的字符

[root@localhost ~]# sed -i 's/o/a/g' 123.txt [root@localhost ~]# cat 123.txt gad gaad gaaad gaaaad gaaaaad gaaaaaad gaaaaaaad

[root@localhost ~]# sed -i '3s/^/#/g' 123.txt 
[root@localhost ~]# cat 123.txt 
11 123
22 1234
#11 431
23 43121
444 4312
444 4321
22 54321 
111 2143
1q
·:“··1 2134
gad
gaad
gaaad
gaaaad
gaaaaad
gaaaaaad
gaaaaaaad

5.在第三行添加#号

[root@localhost ~]# sed -i '3i hello,world' 123.txt 
[root@localhost ~]# cat 123.txt 
11 123
22 1234
hello,world
#11 431
23 43121
444 4312
444 4321
22 54321 
111 2143
1q
·:“··1 2134
gad
gaad
gaaad
gaaaad
gaaaaad
gaaaaaad
gaaaaaaad

6.将文件第三行强行差入一个hello,world

[root@localhost ~]# sed -i '7a hello,world' 123.txt 
[root@localhost ~]# cat 123.txt 
11 123
22 1234
hello,world
#11 431
23 43121
444 4312
444 4321
hello,world
22 54321 
111 2143
1q
·:“··1 2134
gad
gaad
gaaad
gaaaad
gaaaaad
gaaaaaad
gaaaaaaad

7.将hello,world,插入第七行下方

              awk命令:

一. SORT的解释单纯的,SORT依照开头字符,默认为升序

        对文件中的命令进行排序(sort),统计(uniq),分割(cut).

-u

[root@localhost ~]# cat 1234.txt 11 1 12 2 15 7 14 4 13 6 19 5 17 3 [root@localhost ~]# sort -k2 -t " " 1234.txt 11 1 12 2 17 3 14 4 19 5 13 6 15 7
去除重复行-r
依照开头字符,排列的降序-o
输出到另一个文件-m
将文件中的文本合并并输出-n
将文件中的字符,数字,合成一个整体进行排序-t

分隔符,配合-k可以进行对第""列进行排序   就像awk ,-t " " 以空格为分隔符

例如:

uniq  文件名

2.UNIQ文件名,去掉连续重复的内容

去掉连续重复的内容-u        
去掉重复内容-c
统计连续出现的次数cut

3.CUT命令详解(cut是纵向处理)

    (1).

-b
字节(每个汉字为3个字节,没个英文为1按字节)-c
字段(每个汉字为一字段,每个英文单词为一字段)-f
字符(每个字符为一个整体,空格隔开的就为另一个整体)N

  (2).表示范围的方法还有:

[root@localhost ~]# cat 123.txt 11 123 22 1234 hello,world 11 123 23 43121 444 4312 444 4321 hello,world 22 54321 111 2143 1q ·:“··1 2134 gad gaad gaaad gaaaad gaaaaad gaaaaaad gaaaaaaad 郭子林 [root@localhost ~]# cut -b1-3 123.txt #-b 字节 #1-3从一字节到3字节 11 22 hel 11 23 444 444 hel 22 111 1q · gad gaa gaa gaa gaa gaa gaa 郭
只有第N项N-
从第N项一直到行尾巴-M
从行首一直到M(包括M)N-M
从第N行开始到M项(包括M)--output-delimiter=$'\n'
换行符

例如:

[root@localhost ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -1 /etc/passwd |cut -d ":" -f 1,6,7 --output-delimiter=$'\n'
root
/root
/bin/bash

又一个例子:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/790986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存