使用笔记,Shell编制程序进阶篇

by admin on 2019年4月28日

shell函数

阅读目录

1.背景

                 Shell编制程序总括

何以要动用shell函数

linux别的的效益

  1. [root@lamp ~]# alias

  2. alias cp=’cp -i’

  3. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias vi=’vim’

  6. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

设置别称与行使

  1. [root@lamp ~]# alias cdone=’cd /’
  1. [root@lamp ~]# alias

  2. alias cdone=’cd /’

  3. alias cp=’cp -i’

  4. alias l.=’ls -d .* –color=auto’

  1. alias ll=’ls -l –color=auto’

  2. alias ls=’ls –color=auto’

  3. alias mv=’mv -i’

  4. alias rm=’rm -i’

  5. alias vi=’vim’

  6. alias which=’alias | /usr/bin/which
    –tty-only –read-alias –show-dot –show-tilde’

  7. [root@lamp ~]# cdone

  8. [root@lamp /]# pwd

  9. /

函数也是享有和别称类似的功效。函数的职能正是把程序里屡屡科研同样的代码部分概念成一份,然后为那壹份代码起个名字,其余具备的双重调用那部分代码都只用调用这么些名字就足以。当要求修改那有的再度代码时,只须求改造函数体内的一份代码就可以落成调用修改。

使用函数的优势:

壹、把一样的程序段定义成函数,能够削减整个程序的代码量。

二、扩展程序的可读性,以及便于管理。

③、可达成程序作用模块化,分歧的顺序采用函数模块化。

4、让程序代码结构更清晰。

  • 一.一for循环语句
  • 一.贰for循环相关演练题
  • 一.三while循环语句
  • 一.4获取取文件中的行,单词和字符
  • 1.5 break continue exit
    return
  • 1.陆shell中的数组
  • 1.7 Shell 函数
  • 壹.八shell脚本的调弄整理
  • 一.九shell编制程序练习题
  • ①.十各个语句小结
  • 1.11 附录
  • 1.1二linux中的时限信号
  • 一.一三 参考文书档案

Linux
Shell是壹种基础,由于好奇的语法加之较差的可读性,常常被python等剧本代替。既然是基础,那就须要调控,究竟学习Shell脚本的经过中,还是可以驾驭到许多Linux系统的内容。Linux脚本大师不是芸芸众生都得以直达的,不过用有些简单的Shell落成部分普及的基本功用依旧很有必不可缺的。

Seq命令计算用法:

shell函数语法

语法格式:

  1. 简短语法格式

  2. 函数名(){

  3.   指令…

  4.   return n

  5. }

  6. 规范语法格式

  7. function 函数名(){

  8.   指令…

  9.   return n

  10. }

只顾:shell的重回值是exit,函数里用return输出再次回到值。

  

2.正题

选项:

shell函数的施行

调用函数

1)直接试行函数名就可以(不带括号)。

函数名

留意:一、实施函数时,函数后的小括号不需求。二、函数定义及函数体必须在要举行的函数名的前边定义,shell的推行从上到下按行实行。

二)带参数的函数实践格局。

函数名 参数1 参数2

小心:函数的传参和本子的传参类似,只是本子名换到函数名就可以。

函数后接的参数表明:1、shell的职位参数($1、$贰、$三、$4、$5、$#、$*、$?、$@)都能够是函数的参数。二、此时父脚本的参数一时半刻地被函数参数所掩盖或躲藏。三、$0比较新鲜,它仍然是父脚本的名称。4、当函数落成时,原来的命令行脚本的参数即复苏。伍、在shell函数里面,return命令功能与shell里的exit类似,功用是跳出函数。陆、在shell函数体里使用exit会退出整个shell脚本,而不是退出shell函数。七、return语句会再次回到二个脱离值(重返值)给调用函数的次第。八、函数的参数变量是在函数体里面定义,如若是常见变量,一般选取local
i定义。

归来顶部

1) 热身

-f, –format=格式使用printf 样式的浮点格式

shell函数典范

支出脚本建立五个简单函数并调用实施。

  1. [root@lamp /]# cat fun01.sh

  2. #!/bin/bash

  3. test_fun(){

  4.   echo “i
    am shell fun.”

  5. }

  6. test_fun

  7. [root@lamp /]# sh fun01.sh

  8. i am shell fun.

调用别的脚本文件中的函数。

  1. [root@lamp /]# cat fun01.sh

  2. #!/bin/bash

  3. . /fun02.sh

  4. test_fun(){

  5.   echo “i
    am shell fun.”

  6. }

  7. test_fun

  8. test_fun02

  9. [root@lamp /]# cat fun02.sh

  10. #!/bin/bash

  11. test_fun02(){

  12.   echo “i
    am shell fun02.”

  13. }

  14. [root@lamp /]# sh fun01.sh

  15. i am shell fun.

  16. i am shell fun02.

传参

  1. [root@lamp /]# cat fun01.sh

  2. #!/bin/bash

  3. . /fun02.sh

  4. test_fun(){

  5.   echo “i
    am shell fun.”

  6. }

  7. test_fun

  8. test_fun02 $1

  9. [root@lamp /]# cat fun02.sh

  10. #!/bin/bash

  11. test_fun02(){

  12.   echo “i
    am shell $1.”

  13. }

  14. [root@lamp /]# sh fun01.sh golden

  1. i am shell fun.

  2. i am shell golden.

函数字传送参转成参数命令行传输,对随便钦命url推断是不是丰盛。

  1. [root@lamp /]# curl -I -m 3 -o
    /dev/null -s -w %{http_code}
    www.baidu.com

-I 仅测试HTTP头

-m 3 最多询问3秒

-o /dev/null 屏蔽原有输出音讯

-s silent 形式,不出口任何事物

-w %{http_code} 调整额外输出

  1. [root@lamp ~]# cat check_url.sh
  1. #!/bin/bash

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

  3. usage(){

  4.   echo “USAGE:$0 url.”

  5.   exit 1

  6. }

  7. RETVAL=0

  8. check(){

  9.   wget -I 10 –spider -t 2 $1
    &>/dev/null

  10.   RETVAL=$?

  11.   if
    [ $RETVAL -eq 0 ];then

  12.     action “$1 url” /bin/true

  13.   else

  1.     action “$1 url” /bin/false

  2.   fi

  3.   return $RETVAL

  4. }

  5. main(){

  6.   if
    [ $# -ne 1 ];then

  7.     usage

  8.   fi

  9.   check $1

  10. }

  11. main $*

  12. [root@lamp ~]# sh check_url.sh
    www.baidu.com

  13. www.baidu.com url [ OK ]

  14. [root@lamp ~]# sh check_url.sh
    www.baiduxxxx.com

  15. www.baiduxxxx.com url [FAILED]

给字符串加颜色。

  1. [root@lamp ~]# cat color.sh

  2. #!/bin/bash

  3. RED_COLOR=’\E[1;31m’

  4. GREEN_COLOR=’\E[1;32m’

  5. YELLOW_COLOR=’\E[1;33m’

  6. BLUE_COLOR=’\E[1;34m’

  7. PINK=’\E[1;35m’

  8. RES=’\E[0m’

  9. echo -e “$RED_COLOR red $RES”

  10. echo -e “$GREEN_COLOR GREEN $RES”

  11. echo -e “$YELLOW_COLOR YELLOW $RES”

  12. echo -e “$BLUE_COLOR BLUE $RES”

  13. echo -e “$PINK PINK $RES”

出口结果。

home88一必发 1

传二个参数,颜色名称和剧情,输出带颜色的内容。

  1. [root@lamp ~]# cat color_str.sh
  1. #!/bin/bash

  2. RED=’\E[1;31m’

  3. GREEN=’\E[1;32m’

  4. YELLOW=’\E[1;33m’

  5. BLUE=’\E[1;34m’

  6. PINK=’\E[1;35m’

  7. RES=’\E[0m’

  8. usage(){

  9.   echo “USAGE:$0 color contents.”

  10.   exit 1

  11. }

  12. color(){

  13.   if
    [ “$1” = “red” ];then

  14.     echo -e “${RED}$2 $RES”

  15.   elif [ “$1” = “green” ];then

  16.     echo -e “${GREEN}$2 $RES”

  17.   elif [ $1 = “yellow” ];then

  18.     echo -e “${YELLOW}$2 $RES”

  19.   elif [ “$1” = “blue” ];then

  20.     echo -e “${BLUE}$2 $RES”

  21.   elif [ “$1” = “pink” ];then

  22.     echo -e “${PINK}$2 $RES”

  23.   else

  1.     echo “$2”

  2.   fi

  3. }

  4. main(){

  5.   if
    [ $# -ne 2 ];then

  6.     usage

  7.   fi

  8.   color $1 $2

  9. }

  10. main $*

出口结果。

home88一必发 2

一.一 for循环语句

     在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行。

     它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变数。这使得for循环能够知道在迭代过程中的执行顺序。

1.1.1 shell中的for循环

         shell中的for 循环与在c中不同,它包含三种形式:第一种结构是列表for 循环;第二种结构就是不带列表的for循环;第三种就类似于C语言。

①   列表for循环(常用)

#!/bin/bash
for i in 取值列表
do
    循环主体/命令
done

 

②   不带列表for循环(示例)

#!/bin/absh
echo "惨绿少年的博客是:"  
for i 
     do   
     echo "$i" 
done 

   脚本执行结果

[root@clsn for]# sh  for2.sh http://blog.znix.top
惨绿少年的博客是:
http://blog.znix.top

 

 

③   好像C语言的作风那种用法常在C语语言中使用)

for((exp1;exp2;exp3))
    do
      指令...
done   

         编写类似C语言风格脚本

for((i=0;i<=3;i++))
    do
      echo $i
done  

         剧本奉行进度

 

下边的例证体现了如何向脚本传递参数、脚本如何获取参数、if-else推断、变量的运用等骨干内容。

-s, –separator=字符串使用内定字符串分隔数字(默许使用:\n)

case结构条件句

一.一.二 不一样语言的For循环

*Shell中的二种体裁***

 

# 样式一:
for i in 1 2 3 
  do 
    echo $i
done
# 样式二:
for i in 1 2 3;do  echo $i;done

 

  JAVA

for(int i = 0; i < 5; i++){
    //循环语句;
}

  PHP

for ($i = 0; $i < 5; $i++) {
  # statements;
}

  VB

 

For i = 1 To 5
===PASCAL===
for not i=1 do
begin
   i=0;
   writeln('Go on!');
end.

  '循环语句
Next i

 

  swift

 

var x = 0
for i in 1...100{
    x += i
}
print(x)

//5050
for _ in 1...100{
    x += 1
}
print(x)
// 100

var box = [1,2,3,4,5]
for i in box{
    print(i)
}
/*
1 
2 
3 
4 
5
*/
---

 

回到顶部

#!/bin/bash

-w, –equal-width 在列前加多0 使得宽度同样实例 

case结构条件句语法

case语句其实尽管规范的多分支if语句。

  1. case
    “字符串变量” in

  2.   值1) 指令1…

  3. ;;

  4.   值2) 指令2…

  5. ;;

  6.   *) 指令3…

  7. esac

1.二 for循环相关练习题

if [[ $# -lt 1 ]]; then
        echo “args count must > 1”
        echo “Uage: bash +x example01.sh [args…]”
        exit
fi

来自: 

case结构条件句楷模

据他们说用户的输入剖断是哪些数字。即便用户输入数字输出对应输入的数字,假若是任何剧情重返不科学。

  1. [root@lamp ~]# cat case.sh

  2. #!/bin/bash

  3. usage(){

  4.   echo “USAGE:$0 number.”

  5.   exit 1

  6. }

  7. case_fun(){

  8.   case
    $1 in

  9.     [1-3])

  10.       echo $1

  11.   ;;

  12.     *)

  13.       echo “input error.”

  14.   esac

  15. }

  16. main(){

  17.   case
    $# in

  18.     1) case_fun $1

  19.   ;;

  20.     *) usage

  21.   esac

  22. }

  23. main $*

输出结果。

  1. [root@lamp ~]# sh case.sh

  2. USAGE:case.sh number.

  3. [root@lamp ~]# sh case.sh 1

  4. 1

  5. [root@lamp ~]# sh case.sh 2

  6. 2

  7. [root@lamp ~]# sh case.sh 3

  8. 3

  9. [root@lamp ~]# sh case.sh 4

  10. input error.

实践脚本打字与印刷二个水果菜单:

1、apple

2、pear

3、banana

4、cherry

当用户选取水果的时候,打字与印刷选择水果是什么样,并给水果单词加上颜色。

  1. [root@lamp ~]# cat fruit.sh

  2. #!/bin/bash

  3. RED=’\E[1;31m’

  4. GREEN=’\E[1;32m’

  5. YELLOW=’\E[1;33m’

  6. BLUE=’\E[1;34m’

  7. PINK=’\E[1;35m’

  8. RES=’\E[0m’

  9. FLICKER=’\E[31;5m’

  10. usage(){

  11.   echo -e “${FLICKER}Pls select the exist num behind.
    ${RES}”

  12.   exit 1

  13. }

  14. choice(){

  15.   case
    $num in

  16.     1) echo -e “${BLUE}apple${RES}”

  17.   ;;

  18.     2) echo -e “${GREEN}pear${RES}”

  19.   ;;

  20.     3) echo -e “${YELLOW}banana${RES}”

  21.   ;;

  22.     4) echo -e “${RED}cherry${RES}”

  23.   ;;

  24.     *) usage

  25.   esac

  26. }

  27. main(){

  28.   choice $num

  29. }

  30. echo ”

  31.   1、apple

  32.   2、pear

  33.   3、banana

  34.   4、cherry”

  35. read -t 10 -p “Pls input a num:” num

  36. main $num

echo输出字符串展现分歧颜色。

  1. [root@lamp ~]# echo -e “\033[30m 黑色 \033[0m”

  2. [root@lamp ~]# echo -e “\033[31m 红色 \033[0m”

  3. [root@lamp ~]# echo -e “\033[32m 绿色 \033[0m”

  4. [root@lamp ~]# echo -e “\033[33m 黄色 \033[0m”

  5. [root@lamp ~]# echo -e “\033[34m 蓝色 \033[0m”

  6. [root@lamp ~]# echo -e “\033[35m 紫色 \033[0m”

  7. [root@lamp ~]# echo -e “\033[36m 天蓝色 \033[0m”

  8. [root@lamp ~]# echo -e “\033[37m 白色 \033[0m”

home88一必发 3

  1. [root@lamp ~]# echo -e “\033[使用笔记,Shell编制程序进阶篇。40;三7m 黑底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[41;三7m 红底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[4贰;3七m 绿底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[四3;叁柒m 黄底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[4四;叁7m 蓝底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[四伍;三7m 紫底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[四陆;三⑦m 浅灰底白字 \033[0m”
  1. [root@lamp ~]# echo -e “\033[肆柒;30m 白底黑字 \033[0m”

home88一必发 4

越多文字颜色及背景象查看:man console_codes

nginx运营脚本。

  1. [root@lamp ~]# cat nginx_control.sh
  1. #!/bin/bash

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

  3. nginx=/application/nginx/sbin/nginx

  1. profile=/application/nginx/logs/nginx.pid
  1. state() {

  2.   RETVAL=$?

  3.   if
    [ $RETVAL -eq 0 ];then

  4.     action “Nginx is $1” /bin/true

  5.   else

  1.     action “Nginx is $1” /bin/false

  2.   fi

  3.   return $RETVAL

  4. }

  5. start() {

  6.   if
    [ -f $pidfile ];then

  7.     echo “Nginx is running”

  8.   else

  1.     $nginx

  2.     RETVAL=$?

  3.     state started

  4.   fi

  5.   return $RETVAL

  6. }

  7. stop() {

  8.   if
    [使用笔记,Shell编制程序进阶篇。 ! -f $pidfile ];then

  9.     echo “nginx is not running.”

  10.   else

  1.     $nginx -s stop

  2.     state stoped

  3.   fi

  4.   return $RETVAL

  5. }

  6. reload() {

  7.   if
    [ -f $pidfile ];then

  8.     echo “Can’t open $pidfile,no such file or
    directory.”

  9.   else

  1.     $nginx -s reload

  2.     state reload

  3.   fi

  4.   return $RETVAL

  5. }

  6. case
    “$1” in

  7.   start)

  8.     start

  9.     RETVAL=$?

  10.     ;;

  11.   stop)

  12.     stop

  13.     RETVAL=$?

  14.     ;;

  15.   restart)

  16.     stop

  17.     sleep 2

  18.     restart

  19.     RETVAL=$?

  20.     ;;

  21.   reload)

  22.     reload

  23.     RETVAL=$?

  24.     ;;

  25.   *)

  26.     echo “USAGE:$0 {start|stop|reload|restart}”

  1. esac

  2. exit $RETVAL

case总结:

一、case语句就一定于多分支的if语句。case语句优势是更标准、易读。

home88一必发,二、case语句适合变量的值少,且为固定的数字或字符串集结。(start、stop、restart)。

叁、系统服务运营脚本传参的判别多用case语句。

壹.2.一 【练习题一】批量浮动随机字符文件名案例

选择for循环在/clsn目录下批量创建13个html文件,在这之中各种文件需求包涵13个随机小写字母加固定字符串clsn,名称示比如下:

[root@znix C19]# ls /clsn
apquvdpqbk_clsn.html  mpyogpsmwj_clsn.html  txynzwofgg_clsn.html   
bmqiwhfpgv_clsn.html  udrzobsprf_clsn.html  vjxmlflawa_clsn.html  
jhjdcjnjxc_clsn.html  qeztkkmewn_clsn.html jpvirsnjld_clsn.html  
ruscyxwxai_clsn.html

本子内容

[root@clsn for]# cat make_file.sh
#!/bin/bash
#############################################################
# File Name: make_file.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-08 11:01:19
# Description:
#############################################################

[ -d /clsn ] || mkdir -p /clsn
rpm -qa |grep pwgen &>/dev/null
if [ $? -eq 1 ]
then
yum install pwgen -y &>/dev/null
fi

cd /clsn &&\
for i in {1..10}
do
#File_Name=`uuidgen |tr “0-9-” “a-z”|cut -c 1-10`
File_Name2=`pwgen -1A0 10`
touch ${File_Name2}_clsn.html
done
批量变通随机字符文件名

 

 1 [root@clsn for]# cat make_file.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: make_file.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-08 11:01:19
 9 # Description:
10 #############################################################
11 
12 [ -d /clsn ] || mkdir -p /clsn
13 rpm -qa |grep pwgen &>/dev/null
14 if [ $? -eq  1 ] 
15   then 
16     yum install pwgen -y &>/dev/null
17 fi
18 
19 cd /clsn &&\
20 for i in {1..10}
21   do
22    #File_Name=`uuidgen |tr "0-9-" "a-z"|cut -c 1-10`
23    File_Name2=`pwgen -1A0 10`
24    touch ${File_Name2}_clsn.html
25 done

 

本子实践结果

 

[root@clsn for]# ls -l  /clsn 
-rw-r--r-- 1 root root 0 12月  8 19:41 aegheiriek_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 aifohxique_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 caexahween_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 ciefaivaib_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 eixongooph_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 foozaivedo_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 ireeteethu_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 ohmeebivae_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 oiceehahth_clsn.html
-rw-r--r-- 1 root root 0 12月  8 19:41 sheewaehoo_clsn.html

 

arg=$1

一.横着打字与印刷数字

当型循环和直到型循环

while循环专门的学问中运用的不多,一般是医生和医护人员进度程序或一味循环奉行场景,别的循环计算,都会用for替换while。

壹.二.2 【演练题二】批量化名特殊案例

【演练题1】中结果文件名中的clsn字符串全体制改进成znix(最佳用for循环达成),并且将扩充名html全部制改善成大写。

jpvirsnjld_clsn.html   ===> jpvirsnjld_znix.HTML

本子内容:

[root@clsn for2]# cat rename_file.sh
#!/bin/bash
#############################################################
# File Name: rename_file.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-08 11:31:56
# Description:
#############################################################

cd /clsn &&\
File_name=`ls |sed -r ‘s#(.*)_clsn.html#\1#g’`

for i in $File_name
do
if [ -f ${i}_clsn.html ]
then
mv ${i}_clsn.html ${i}_znix.HTML
else
echo “文件修改落成.”
exit
fi
done
批量更名

 

 1 [root@clsn for2]# cat rename_file.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: rename_file.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-08 11:31:56
 9 # Description:
10 #############################################################
11 
12 cd /clsn &&\
13 File_name=`ls |sed -r 's#(.*)_clsn.html#\1#g'`
14 
15 for i in $File_name
16   do
17    if [ -f ${i}_clsn.html ] 
18      then
19      mv ${i}_clsn.html ${i}_znix.HTML
20    else
21      echo "文件修改完成."
22      exit
23    fi
24 done

 

查看结果

[root@clsn for2]# ls /clsn/
aeyaesughi_znix.HTML  caireasipi_znix.HTML  uahahnieli_znix.HTML
aifaepheeb_znix.HTML  eathixoong_znix.HTML  zalipageen_znix.HTML
akuipheeye_znix.HTML  ietoothaik_znix.HTML
apheikieno_znix.HTML  lachohtaif_znix.HTML

if [[ $arg -gt 10 ]]; then
        echo “$arg > 10”
else
        echo “$arg < 10”
fi
以此本子的调用格局如下:

 home88一必发 5

当型和直到型循环语句

1、while条件句

语法:

  1. while
    条件

  2.   do

  1.   指令 …

  2. done

2、until条件句

语法:

  1. until 条件

  2.   do

  1.   指令 …

  2. done

无论是条件是或不是建立都会试行一次。

1.二.2.壹  批量改名别的情势

  rename 格局(最有益,专门的职业改名)

rename txt jpg *

*  非 for 循环模式批量化名*(使用sed命令进行拼接,然后提交bash实行)

ls *jpg|sed -r 's#(.*).jpg#mv &  \1.mp4#'|bash

bash +x example0一.sh 5二).数组、函数字传送参数,循环

2.竖着打字与印刷数字:

当型和直到型基本轨范

每隔二秒荧屏输出负载值。

  1. [root@lamp ~]# cat while.sh

  2. #!/bin/bash

  3. while
    true

  4.   do

  1.     uptime

  2.     sleep 2

  3.   done

严防客户端试行脚本中断的章程。

1、sh while.sh &

2、nohup while.sh &

三、screen保持回话。

ctl+c:截至试行当前剧本或职务

ctrl+z:暂停试行当前剧本或职分

bg:把当前剧本或职分放入后台实行

fg:当前剧本或职分张开前台实践,假若有多个职务,能够fg加职务编号调出

jobs:查看当前实行的台本或职务

经过管理命令

bg:后台运营

fg:挂起头后

jobs:展现后台程序

kill、killall、pkill:杀掉进程

crontab:设置定期

ps:查看进度

pstree:展现进程景况树

top:展现过程

nice:更改优先权

nohup:用户退出系统现在继续做事

pgrep:查找相配原则的历程

strace:追踪三个历程的系统调用情状(strace + pid)

ltrace:追踪进度调用库函数的事态

vmstat:报告虚拟内存总括音讯

while实现1到100之和。

  1. [root@lamp ~]# cat while_add.sh
  1. #!/bin/bash

  2. i=1

  3. sum=0

  4. while
    [ $i -le 100 ]

  5.   do

  1.     ((sum+=$i))

  2.     ((i++))

  3.   done

  4. echo $sum

专注:在职业中多利用算法,代码实施效能更加高。

应用while循环竖向打字与印刷10、玖、八…

  1. [root@lamp ~]# cat while_seq.sh
  1. #!/bin/bash

  2. i=10

  3. while
    [ $i -gt 0 ]

  4.   do

  1.     echo “$i”

  2.     ((–i))

  3.   done

手提式有线电话机充钱10元,每发3回短信开销0.一五元,当前余额小于0.1伍元不能够发短信,提醒余额不足,请充钱,能够允许用户充钱后接二连三发短信。

  1. [root@lamp ~]# cat messages.sh
  1. #!/bin/bash

  2. total=0

  3. menu=’

  4. 1:充值

  5. 2:发送音信

  6. 3:退出

  7. pay(){

  8.   read -t 10 -p “Pls input pay money:” num

  9.   expr ${num} + 1 &>/dev/null

  10.   [ $? -ne 0 ]&&{

  11.     echo “Input error”

  12.     return 1

  13.   }

  14.   if
    [ ${num} -gt 0 ];then

  15.     total=$(( $total + $num * 100 ))

  1.   else
  1.     echo “Input error”

  2.     return 1

  3.   fi

  4. }

  5.  

  6. send(){

  7.   if
    [ ${total} -gt 15 ];then

  8.     echo “send messages is ok.”

  9.     total=$(( $total – 15 ))

  10.   else

  1.     echo “余额不足!”

  2.   fi

  3. }

  4.  

  5. while
    true

  6. do

  1.   echo “当前余额:${total}”

  2.   echo ${menu}

  3.   read -t 10 -p “Pls input a num:” choice

  4.   case
    ${choice} in

  5.     1) pay

  6.     ;;

  7.     2) send

  8.     ;;

  9.     3) exit 0

  10.     ;;

  11.     *)

  12.   esac

  13. done

while按行读取文件的点子。

方式一

  1. exec <FILE

  2. sum=0

  3. while
    read line

  4. do

  1.   cmd

  2. done

方式二

  1. cat ${FILE_PATH} | while read line

  2. do

  1.   cmd

  2. done

方式三

  1. while
    read line

  2. do

  1.   cmd

  2. done<FILE

计量apache一天的日志中全数行的各因素的拜会字节数的总的数量。

  1. [root@lamp ~]# cat log_cmd.sh
  1. #/bin/bash

  2. exec access.log

  3. while
    read line

  4. do

  1.   i=`echo $line|awk ‘{print $10}’`
  1.   expr $i + 1 &>/dev/null

  2.   if
    [ $? -ne 0 ];then

  3.     continue

  4.   fi

  5.   ((sum+=i))

  6. done

  7. [ -n “$sum” ] && echo $sum

while循环小结。

一、while循环的专长是试行守护进度以及大家期待循环不脱离持续推行的地方,用功用低于一分钟的巡回管理,其余的while循环差不多都能够被for循环代替。

二、大概全体的case语句都能够用if语句替换,一般在系统运行脚本传入一丢丢定位规则字符串,用case语句,其余普节度使断多用if。

三、工作中if和for最常用,其次while(守护进程)和case(服务运行脚本)。

读取一个文本,倒插入一个新的文书,清空原作件。

  1. [root@lamp ~]# cat read_line.sh
  1. #!/bin/bash

  2. file=/root/read.sh

  3. num=`wc -l ${file}|awk -F ‘ ‘ ‘{print
    $1}’`

  4. while
    [ ${num} -gt 0 ]

  5. do

  1.   line=`tail -1 ${file}`

  2.   echo ${line}

  3.   echo
    ${line}>>/root/read_bak.sh

  4.   sed -i ‘$d’ ${file}

  5.   num=`wc -l ${file}|awk -F ‘ ‘
    ‘{print $1}’`

  6. done

一.二.叁 【演习题三】批量创办特殊需求用户案例

  批量创建十一个系统帐号clsn0一-clsn10并设置密码(密码为随机数,须要字符和数字等混合)。

剧本内容:

[root@clsn for2]# cat add_user.sh
#!/bin/bash
#############################################################
# File Name: add_user.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-08 11:52:21
# Description:
#############################################################

Passwd_File=/tmp/`uuidgen`.txt
>$Passwd_File
chmod 400 $Passwd_File

for i in clsn{01..10}
do
userdel -r “$i” &>/dev/null
id $i &>/dev/null
if [ $? -ne 0 ]
then
useradd $i
PassWd=`uuidgen`
echo $PassWd |passwd –stdin $i &>/dev/null
echo “用户名:$i 密码:$PassWd” >>$Passwd_File
echo -e “\033[32m $i 用户成立成功!\033[0m”
else
echo “$i 用户已存在”
fi
if [ “$i” == “clsn10” ]
then
echo “用户密码请查看文件 $Passwd_File”
fi
done
批量成立特殊供给用户

 

 1 [root@clsn for2]# cat add_user.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: add_user.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-08 11:52:21
 9 # Description:
10 #############################################################
11 
12 Passwd_File=/tmp/`uuidgen`.txt
13 >$Passwd_File
14 chmod 400 $Passwd_File
15 
16 for i in clsn{01..10}
17   do
18    userdel -r "$i" &>/dev/null
19    id $i &>/dev/null
20    if [ $? -ne 0 ]
21      then
22        useradd $i
23        PassWd=`uuidgen`
24        echo $PassWd |passwd --stdin $i &>/dev/null
25        echo "用户名:$i  密码:$PassWd" >>$Passwd_File
26        echo -e "\033[32m $i 用户创建成功!\033[0m"
27    else 
28      echo "$i 用户已存在"
29    fi
30    if [ "$i" == "clsn10" ] 
31      then
32        echo "用户密码请查看文件 $Passwd_File"
33    fi
34 done

 

查看成的密码文件

 

[root@clsn for2]# cat /tmp/3e5c18d9-f878-4d06-931e-5bbcc810c3dc.txt 
用户名:clsn01  密码:3d4644d0-9cf4-49db-8928-1a8346972c32
用户名:clsn02  密码:70798c3a-c8e3-42a0-9942-d4011ce4b4b3
用户名:clsn03  密码:db2a0f1d-2e49-44f5-a5b2-69b352b30120
用户名:clsn04  密码:62d2e0c6-b755-4b00-ad2d-c98f9ca9f258
用户名:clsn05  密码:eaa3471b-d04f-4d7c-8b7e-3d75172a483b
用户名:clsn06  密码:fb260a11-cd47-4b97-ab49-0cae7a755262
用户名:clsn07  密码:16ee7a1f-8aac-4537-b1aa-7fc75beb8754
用户名:clsn08  密码:0dde8823-b97d-4c88-9258-3a68a3b53eba
用户名:clsn09  密码:daf14ec4-ba9f-4593-9773-1557fdf605dc
用户名:clsn10  密码:6f1b452c-00b2-44a1-9f43-5f658d3a9124

 

剧本实行进度:

 

下边包车型地铁例子体现了数组、函数、循环等着力选择。

 home88一必发 6

for循环结构

一.2.三.一  批量创立用户并设置随机密码(不应用shell循环)

  方法一

echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& echo \1 >>/tmp/passwd.txt \&\& echo $RANDOM |md5sum |cut -c 1-5>>/tmp/passwd.txt \&\& echo `tail -1 /tmp/passwd.txt`|passwd --stdin \1#g'|bash

  方法二

echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& pass=`echo $RANDOM |md5sum |cut -c 1-5` \&\& echo $pass |passwd --stdin \1 \&\& echo \1 $pass>>/tmp/user_passwd.txt#g'|bash

  方法三

echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 \&\& pass=`echo $RANDOM |md5sum |cut -c 1-5` \&\& echo \1:$pass>>/tmp/user_passwd.txt \&\& chpasswd</tmp/user_passwd.txt#g'|bash

#!/bin/bash

home88一必发 7

for循环结构语法

一、for循环结构

语法

  1. for
    变量名 in 变量取值列表

  2. do

  1.   指令…

  2. done

在此布局中”in 变量取值列表”可粗略,省略时一定于in $@,使用for
i就相当于采纳for i in $@。

2、C语言型for循环结构

语法

  1. for((exp1;exp2;exp3))

  2. do

  1.   指令…

  2. done

for和while对比。

  1. [root@lamp ~]# cat for.sh

  2. #!/bin/bash

  3. for((i=1;i<=5;i++))

  4. do

  1.   echo $i

  2. done

  3.  

  4. [root@lamp ~]# cat while.sh

  5. #!/bin/bash

  6. i=1

  7. while((i<=5))

  8. do

  1.   echo $i

  2.   ((i++))

  3. done

措施壹:直接列出成分的章程。

  1. [root@lamp ~]# cat for_02.sh
  1. #!/bin/bash

  2. for i
    in 1 2 3 4 5

  3. do

  1.   echo ssh 192.168.1.${i}

  2. done

  3. [root@lamp ~]# sh for_02.sh

  4. ssh 192.168.1.1

  5. ssh 192.168.1.2

  6. ssh 192.168.1.3

  7. ssh 192.168.1.4

  8. ssh 192.168.1.5

方法贰:使用大括号的不2秘技

  1. [root@lamp ~]# cat for_02.sh
  1. #!/bin/bash

  2. for i
    in {1..5}

  3. do

  1.   echo ssh 192.168.1.${i}

  2. done

  3. [root@lamp ~]# sh for_02.sh

  4. ssh 192.168.1.1

  5. ssh 192.168.1.2

  6. ssh 192.168.1.3

  7. ssh 192.168.1.4

  8. ssh 192.168.1.5

艺术3:使用命令结果。

  1. [root@lamp ~]# cat for_03.sh
  1. #!/bin/bash

  2. for i
    in `seq 5`

  3. do

  1.   echo ssh 192.168.1.${i}

  2. done

  3. [root@lamp ~]# sh for_03.sh

  4. ssh 192.168.1.1

  5. ssh 192.168.1.2

  6. ssh 192.168.1.3

  7. ssh 192.168.1.4

  8. ssh 192.168.1.5

多少人1行彰显的优化措施。

  1. [root@lamp ~]# seq 10 >a.log
  1. [root@lamp ~]# cat a.log

  2. 1

  3. 2

  4. 3

  5. 4

  6. 5

  7. 6

  8. 7

  9. 8

  10. 9

  11. 10

  12. [root@lamp ~]# cat a.log|xargs -n4

  1. 1 2 3 4

  2. 5 6 7 8

  3. 9 10

  4. [root@lamp ~]# xargs -n4 <a.log

  1. 1 2 3 4

  2. 5 6 7 8

  3. 9 10

  4. [root@lamp ~]# cat a.log|grep 3

  1. 3

  2. [root@lamp ~]# grep 3 a.log

  3. 3

来妥贴前路径的富有文件。

  1. [root@lamp ~]# cat for_04.sh
  1. #!/bin/bash

  2. for i
    in `ls`

  3. do

  1.   echo $i

  2. done

批量变化随机文件。

  1. [root@lamp ~]# cat for_05.sh
  1. #!/bin/bash

  2. for((i=1;i<=10;i++))

  3. do

  1.   mkdir -p ./test

  2.   touch ./test/`echo
    $RANDOM|md5sum|cut -c 1-8`_finished.jpg

  3. done

批量更名。

  1. [root@lamp ~]# cat for_06.sh
  1. #!/bin/bash

  2. for i
    in `ls /root/test`

  3. do

  1.   cd /root/test

  2.   mv $i `echo $i|sed
    ‘s#_finished.jpg#.html#g’`

  3. done

 

  1. [root@lamp test]# ls|awk -F ‘[_]’
    ‘{print “mv ” $0,$1″.html”}’|bash

 

  1. [root@lamp test]# rename “_finished.html” “.jpg” *.html

rename “改什么” “改成什么样” 对何人进行更动

扫除关闭某服务开机自运营。

  1. [root@lamp test]# chkconfig
    –list|grep 3:on|awk ‘{print $1}’|egrep -v “rsyslog|sshd|systat”|sed -r
    ‘s#(.*)#chkconfig \1 off#g’|bash

for实现1+2+3+…+100。

  1. [root@lamp ~]# cat for_07.sh
  1. #!/bin/bash

  2. for
    ((i=1;i<=100;i++))

  3. do

  1.   ((sum+=$i))

  2. done

  3. echo “sum=${sum}”

 

  1. [root@lamp ~]# cat for_08.sh
  1. #!/bin/bash

  2. for i
    in `seq 100`

  3. do

  1.   let sum+=i

  2. done

  3. echo “sum=${sum}”

算法最快。

  1. [root@lamp ~]# echo
    $((100*(100+1)/2))

 

chpasswd批量更新用户口令工具。

建立指令文件passwd.txt(格式为[username:passwd])

# vi passwd.txt

username1:passwd1

username2:passwd2

将passwd.txt的剧情传输到chpasswd指令来修改相应用户的密码

# chpasswd < doiido.txt

一.2.四 【演练题4】扫描互连网内现存主机案例

  写一个Shell脚本,决断拾.0.0.0/2四网络里,当前在线的IP有啥?

本子内容:

[root@clsn for]# cat scan_ip2.sh
#!/bin/bash
#############################################################
# File Name: scan_ip.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-07 21:58:47
# Description:
#############################################################

Ip_File=/tmp/scan_ip.txt
>$Ip_File

for i in 10.0.0.{1..254}
do
ping -c 1 -W 1 $i &>/dev/null && \
if [ $? -eq 0 ] ;then
echo “存活主机: $i” &>>$Ip_File
fi &
done
echo “使用 cat $Ip_File 查看扫描结果”
环视互连网内现存主机

 

 1 [root@clsn for]# cat scan_ip2.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: scan_ip.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-07 21:58:47
 9 # Description:
10 #############################################################
11 
12 Ip_File=/tmp/scan_ip.txt
13 >$Ip_File
14 
15 for i in 10.0.0.{1..254}
16  do
17   ping -c 1 -W 1 $i &>/dev/null && \
18   if [ $? -eq 0 ] ;then 
19     echo "存活主机: $i" &>>$Ip_File
20   fi &   
21 done
22 echo "使用 cat $Ip_File 查看扫描结果"

 

剧本实行结果

 

[root@clsn for]# time sh scan_ip2.sh 
使用 cat /tmp/scan_ip.txt 查看扫描结果

real    0m0.290s
user    0m0.001s
sys    0m0.039s

[root@clsn for]#  cat /tmp/scan_ip.txt
存活主机: 10.0.0.180
存活主机: 10.0.0.254

 

if [[ $# -lt 1 ]]; then
 echo “args count must > 1”
 echo “Uage: bash +x example01.sh [args…]”
 exit
fi

home88一必发 8

break continue exit return对比

break、continue、exit一般用于循环结构中央调控制循环(for、while、if)的走向。

break n:n表示跳出循环的层数,如若省略n表示跳出整个循环。

continue
n:n表示退到第n层继续循环,假如省略n表示跳过此次巡回,忽略此次巡回的剩余代码,进入循环的下叁回巡回。

exit
n:退出当前shell程序,n为重回值。n也得以总结,再下一个shell里透过$?接收这么些n值。

return n:用于在函数里,作为函数的再次回到值,用于决断函数实施是不是正确。

  1. [root@lamp ~]# cat for_09.sh
  1. #!/bin/bash

  2. for((i=0;i<=5;i++))

  3. do

  1.   if
    [ $i -eq 3 ];then

  2.   #continue

  3.   #break

  4.   exit

  5.   fi

  6.   echo $i

  7. done

  8. echo “ok”

contine生效

  1. [root@lamp ~]# sh for_09.sh

  2. 0

  3. 1

  4. 2

  5. 4

  6. 5

  7. ok

break生效

  1. [root@lamp ~]# sh for_09.sh

  2. 0

  3. 1

  4. 2

  5. ok

exit生效

  1. [root@lamp ~]# sh for_09.sh

  2. 0

  3. 1

  4. 2

一.二.⑤ 【演练题伍】筛选符合长度的单词案例

  利用bash
for循环打字与印刷上边那句话中字母数相当的小于6的单词(某市廛面试真题)。

    I am clsn Welcome to my blog

本子内容:

[root@clsn for]# vim changdu.sh
#!/bin/bash
#############################################################
# File Name: changdu.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-07 22:36:48
# Description:
#############################################################

Word=’I am clsn Welcome to my blog ‘

for i in $Word
do
#[ ${#i} -le 6 ] && echo $i #子串方法
a=`echo $i |wc -L`
if [ $a -le 6 ]
then
echo $i
fi
done
筛选符合长度的单词

 

 1 [root@clsn for]# vim  changdu.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: changdu.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-07 22:36:48
 9 # Description:
10 #############################################################
11 
12 Word='I am clsn Welcome to my blog http://blog.znix.top'
13 
14 for i in $Word
15  do 
16   #[ ${#i} -le 6 ]  && echo $i  #子串方法
17   a=`echo $i |wc -L`
18   if [ $a -le 6 ]
19     then 
20       echo $i
21    fi
22 done

 

本子推行结果

 

[root@clsn for]# sh changdu.sh 
I
am
clsn
to
my
blog

 

方法二:

 

read -p "请输入要判断的语句:" a
set -- $a
for i in "$@"
  do
    if [ ${#i} -le 6 ];then
       echo "$i" 
    fi
done

 

 由 https://home.cnblogs.com/u/1233234
  @贰佰  提供

使用expr 总结字符串长度

[root@clsn scripts]# expr length '111'
3

args=$@

三.用seq输出,交给bc命令总计

一.二.6 【练习题六】破解RANDOM随机数案例

  已知上边包车型大巴字符串是经过RANDOM随机数变量md伍sum后,再截取1有的一而再字符串的结果,请破解那个字符串对应的使用md5sum管理前的RANDOM对应的数字?

  21029299
  00205d1c
  a3da1677
  1f6d12dd
  890684b

本子内容

[root@clsn for]# vim pojie.sh
#!/bin/bash
#############################################################
# File Name: pojie.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-07 22:41:01
# Description:
#############################################################

md5File=/tmp/Randow_Md5.txt
Md5_Word=”21029299 00205d1c a3da1677 1f6d12dd 890684b”

if [ ! -f $md5File ]
then
>$md5File
for i in {0..32767}
do
echo `echo $i |md5sum` $i >> $md5File
done
else
for num in $Md5_Word
do
grep $num $md5File
done
fi
破解RANDOM随机数

 

[root@clsn for]# vim  pojie.sh 
#!/bin/bash
#############################################################
# File Name: pojie.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-07 22:41:01
# Description:
#############################################################

md5File=/tmp/Randow_Md5.txt
Md5_Word="21029299 00205d1c a3da1677 1f6d12dd 890684b"

if [ ! -f $md5File ]
  then
    >$md5File
    for i in {0..32767}
       do
        echo `echo $i |md5sum` $i  >> $md5File
    done
else
    for num in $Md5_Word
      do
       grep $num $md5File
    done
fi

 

剧本实践结果

[root@clsn for]# sh  pojie.sh 
2102929901ee1aa769d0f479d7d78b05 - 25667
00205d1cbbeb97738ad5bbdde2a6793d - 1346
a3da1677501d9e4700ed867c5f33538a - 25345
1f6d12dd61b5c7523f038a7b966413d9 - 7041
890684ba3685395c782547daf296935f - 10082

for arg in $args; do
 echo $arg
done

home88一必发 9

一.2.柒 【演习题柒】新浪博文爬虫案例

  获取新浪(惨绿少年)博客列表倒序排序考试题

急需如下:

  请把

    20一柒年一月4日  Shell编制程序基础篇-下

    

    20一7年11月1十八日   memcached 缓存数据库应用实行

    

高端须求:

  生成html页面,并设置超链接。

  结果如改网页展现:

本子内容:

 

 1 [root@clsn htmp]# cat clsn_blog.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: clsn_blog.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-08 21:19:12
 9 # Description:
10 #############################################################
11 
12 Uri='http://www.cnblogs.com/clsn/default.html?page='
13 
14 clsn_Html=/tmp/html/clsn.html
15 mkdir -p /tmp/html/
16 >$clsn_Html
17 
18 for i in {1..6}
19   do
20     curl -s  $Uri$i |grep -A 5  'ImageLink' |sed  's#<.*div.*># #g'|sed 's#--#<br>#g' >> $clsn_Html
21     echo '<br>' >>$clsn_Html
22 done

 

脚本成网页文件

 

function fun() {
 echo $1
}

注:能够测算加减乘除,浮点数,进制转换

一.二.柒.一  5一CTO博客爬虫案例

剧本内容

[root@clsn html]# cat oldboy_blog.sh
#!/bin/bash
#############################################################
# File Name: oldboy_blog.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-08 22:30:57
# Description:
#############################################################

Uri=”
Blog_Index_File=/tmp/html/oldboy_blog.html
mkdir -p /tmp/html
> /tmp/html/oldboy_blog.html

for i in {1..29}
do
curl -s $Uri$i |grep -A 5 ‘发布于’ |\
sed ‘/^.*zan fr.*/,+2d’|\
sed ‘s#^–$#<br>#g’|\
sed ‘s#<a.*fl”>发布于:#<a>#g’|\
sed ‘s#<sp.*an>##g’ >>\
$Blog_Index_File
echo ‘<br>’ >>$Blog_Index_File
done
5壹CTO博客爬虫

 

 1 [root@clsn html]# cat oldboy_blog.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: oldboy_blog.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-08 22:30:57
 9 # Description:
10 #############################################################
11 
12 Uri='http://blog.51cto.com/oldboy/p'
13 Blog_Index_File=/tmp/html/oldboy_blog.html
14 mkdir -p /tmp/html
15 > /tmp/html/oldboy_blog.html
16 
17 for i in {1..29}
18   do
19   curl -s $Uri$i |grep -A 5  '发布于'  |\
20        sed '/^.*zan fr.*/,+2d'|\
21        sed 's#^--$#<br>#g'|\
22        sed 's#<a.*fl">发布于:#<a>#g'|\
23        sed 's#<sp.*an>##g' >>\
24            $Blog_Index_File
25   echo '<br>' >>$Blog_Index_File
26 done

 

附 文本编码转码

 

[root@clsn for]# iconv --help
用法: iconv [选项...] [文件...]
转换给定文件的编码。

 输入/输出格式规范:
  -f, --from-code=名称     原始文本编码
  -t, --to-code=名称       输出编码

 信息:
  -l, --list                 列举所有已知的字符集

 输出控制:
  -c                         从输出中忽略无效的字符
  -o, --output=FILE          输出文件
  -s, --silent               关闭警告
      --verbose              打印进度信息

  -?, --help                 给出该系统求助列表
      --usage                给出简要的用法信息
  -V, --version              打印程序版本号

长选项的强制或可选参数对对应的短选项也是强制或可选的

 

常用:

 iconv  -f gb2312  -t utf-8 -c  clsn.html

回去顶部

fun “hello shell”

Echo命令用法计算:

一.三 while循环语句

在编程语言中,while循环(英语:while loop)是一种控制流程的陈述。利用一个返回结果为布林值(Boolean)的表达式作为循环条件,当这个表达式的返回值为“真”(true)时,则反复执行循环体内的程式码;若表达式的返回值为“假”(false),则不再执行循环体内的代码,继续执行循环体下面的代码。

         因为while循环在区块内代码被执行之前,先检查陈述是否成立,因此这种控制流程通常被称为是一种前测试循环(pre-test loop)。相对而言do while循环,是在循环区块执行结束之后,再去检查陈述是否成立,被称为是后测试循环。

 

 

fun2() {
 echo “Linux”
}

echo 选项列表

1.3.1 shell中while语法

while 条件
  do
    命令
done

fun贰注意,函数fun中的$一,获取的是函数参数,不是本子调用时传出的参数。$@
是获得脚本调用时传出的参数列表。

选项

描述

-n

不输出末尾的换行符。

-e

启用反斜线转义。

\b

退格

\\

反斜线

\n

新行

\r

回车

\t

水平制表符

\v

垂直制表符

1.3.贰 while 使用情形

         多用于创制守护进度

【示例一】:while落成web服务器搭建

         脚本代码

 

[root@clsn scripts]# vim web_view.sh 
#!/bin/bash
#############################################################
# File Name: web_view.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-11 10:07:24
# Description:
#############################################################
while true
  do
  echo "ok" | nc -l 81
done

 

  客户端实行访问测试

[root@clsn html]# curl 10.0.0.180:81
ok

  服务端彰显结果:

[root@clsn scripts]# sh  web_view.sh 
GET / HTTP/1.1
User-Agent: curl/7.29.0
Host: 10.0.0.180:81
Accept: */*

【示例二】:while创设按期职务

         脚本内容:

#!/bin/bash
while  true
  do
    uptime
       sleep 0.6
done

         脚本实践结果

 

[root@clsn while]# sh  while1.sh 
 15:01:52 up 2 days,  6:02,  3 users,  load average: 0.00, 0.01, 0.05
 15:01:53 up 2 days,  6:02,  3 users,  load average: 0.00, 0.01, 0.05
 15:01:53 up 2 days,  6:02,  3 users,  load average: 0.00, 0.01, 0.05
 15:01:54 up 2 days,  6:02,  3 users,  load average: 0.00, 0.01, 0.05
 15:01:55 up 2 days,  6:02,  3 users,  load average: 0.00, 0.01, 0.05
 15:01:55 up 2 days,  6:02,  3 users,  load average: 0.00, 0.01, 0.05

 

说明:

         sleep 与 usleep

sleep 单位 秒  sleep 1 休息1秒

usleep 单位 微秒 usleep 1000000 休息1s

①飞秒等于百相当之壹秒(十的负陆回方秒)

日子测试

[root@clsn while]# time sleep 0.1

real    0m0.102s
user    0m0.001s
sys    0m0.000s

三).while 循环以及其它二种循环、case、表达式expr的利用

home88一必发 10

1.3.3 while 作用

  补充定期职分功效,实施小于1秒的按期义务

  循环实践某个操作,举个例子水果菜单

              (1.3.6)

以身作则1:使用while循环达成水果菜单的重复使用  

         脚本内容

1 使用while循环实现水果菜单的重复使用

         脚本实践进程

 

示例2:计算1-100的和

  方法壹 (bc命令完结)

echo `seq -s + 1 100`|bc

  方法二(while循环方法)

 

[root@clsn while]# cat jishan.sh 
#!/bin/bash
#############################################################
# File Name: jishan.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-09 15:18:44
# Description:
#############################################################

i=1

while [ "$i" -le 100 ]
  do
  ((b=b+i))
  ((i++))
done
echo $b

 

以身作则3:达成类似手提式有线电电话机通信计费功效

         脚本内容:

 

 1 [root@clsn scripts]# cat while/shouji.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: shouji.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-09 15:56:09
 9 # Description:
10 #############################################################
11 sum=1000
12 i=15
13 
14 
15 while [ $sum -ge 15 ]
16   do
17 cat<<EOF
18 =================
19 1.发短信
20 2.查余额
21 3.账户充值
22 4.退出
23 =================
24 EOF
25     read -p "你要做什么呢?" Some
26     case "$Some" in
27       1)
28         sum=$((sum-i))
29         read -p  "请输入发送短信的内容:"
30         read -p  "请输入收信人:"
31         sleep 0.3
32         echo "发送成功."
33         echo "您当前余额为$sum"
34         ;;
35       2)
36         echo "您当前余额为$sum"
37         ;;
38       3)
39         read -p "请输入你要充值的金额:" ChongZhi
40         sum=$((sum+ChongZhi))
41         echo "充值成功,当前余额为$sum"
42         ;;
43       4)
44         exit
45         ;;
46       *)
47         echo "输入有误!"
48         exit 2
49     esac
50 done
51 
52 echo "余额不足,请及时充值!"

 

回到顶部

#!/bin/bash

home88一必发 11

壹.肆 获取取文件中的行,单词和字符

if [[ $# -lt 1 ]]; then
        echo “args count must > 1”
        echo “Uage: bash +x example01.sh [args…]”
        exit
fi

注:echo-e启用转义字符反斜线的编写翻译器,上边命令启用-e 
\t展现为水平制表符

一.四.一 迭代获取文件中的每1行

方法一

while read line;
  do 
    echo $line;
done < file.txt

方法二

cat file.txt|while read line
  do
echo $line
done

方法三

exec < file.txt
while read line;
  do
    echo line;
done

case $1 in
        “install” )
                echo “operation type is install”
        ;;
        “uninstall” )
                echo “operation type is uninstall”
        ;;
        * )
                echo “operation type is not support”
        ;;
esac

home88一必发 12

一.四.二 迭代获取每二个单词

for word in $line;
  do
    echo $word;
done 

for ((i=0;i<3;i++))
do
        if ((i==1))
        then
                continue
        fi
        echo $i
done

注:echo-e启用转义字符反斜线的编写翻译器,上边命令启用-e 
\v显示为垂直制表符

一.四.3 迭代获取每一个字符

word=participate
for ((i=0;i<${#word};i++))
  do
    echo  ${word:1:1};
done

for i in `seq 5`
do
        echo “loop $i”
done

home88一必发 13

1.四.四 同时获取取文件中的行,单词和字符脚本

剧本内容

 

#!/bin/bash
n=1
while read i
  do
   echo "第${n}行 $i"
   m=1
   for x in $i
     do
       echo "第${m}个单词 $x"
       echo $x|grep -o . 
       ((m++))
   done
   ((n++))
done < $1

 

剧本实践结果:

[root@clsn scripts]# sh lunxun.sh /etc/hosts
第1行 127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4
第1个单词 127.0.0.1
1
2
7
.
0
.
0
.
1
第2个单词 localhost
l
o
c
a
l
h
o
s
t
第3个单词 localhost.localdomain
l
o
c
a
l
h
o
s
t
.
l
o
c
a
l
d
o
m
a
i
n
第4个单词 localhost4
l
o
c
a
l
h
o
s
t
4
第5个单词 localhost4.localdomain4
l
o
c
a
l
h
o
s
t
4
.
l
o
c
a
l
d
o
m
a
i
n
4
第2行 ::1 localhost localhost.localdomain localhost6
localhost6.localdomain6
第1个单词 ::1
:
:
1
第2个单词 localhost
l
o
c
a
l
h
o
s
t
第3个单词 localhost.localdomain
l
o
c
a
l
h
o
s
t
.
l
o
c
a
l
d
o
m
a
i
n
第4个单词 localhost6
l
o
c
a
l
h
o
s
t
6
第5个单词 localhost6.localdomain6
l
o
c
a
l
h
o
s
t
6
.
l
o
c
a
l
d
o
m
a
i
n
6
第3行 10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com
第1个单词 10.0.0.1
1
0
.
0
.
0
.
1
第2个单词 mirrors.aliyuncs.com
m
i
r
r
o
r
s
.
a
l
i
y
u
n
c
s
.
c
o
m
第3个单词 mirrors.aliyun.com
m
i
r
r
o
r
s
.
a
l
i
y
u
n
.
c
o
m
第4行 10.0.0.180 clsn
第1个单词 10.0.0.180
1
0
.
0
.
0
.
1
8
0
第2个单词 clsn
c
l
s
n
一.4.四 同时获得取文件中的行,单词和字符脚本 实行结果

 

  1 [root@clsn scripts]# sh  lunxun.sh  /etc/hosts
  2 第1行 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  3 第1个单词 127.0.0.1
  4 1
  5 2
  6 7
  7 .
  8 0
  9 .
 10 0
 11 .
 12 1
 13 第2个单词 localhost
 14 l
 15 o
 16 c
 17 a
 18 l
 19 h
 20 o
 21 s
 22 t
 23 第3个单词 localhost.localdomain
 24 l
 25 o
 26 c
 27 a
 28 l
 29 h
 30 o
 31 s
 32 t
 33 .
 34 l
 35 o
 36 c
 37 a
 38 l
 39 d
 40 o
 41 m
 42 a
 43 i
 44 n
 45 第4个单词 localhost4
 46 l
 47 o
 48 c
 49 a
 50 l
 51 h
 52 o
 53 s
 54 t
 55 4
 56 第5个单词 localhost4.localdomain4
 57 l
 58 o
 59 c
 60 a
 61 l
 62 h
 63 o
 64 s
 65 t
 66 4
 67 .
 68 l
 69 o
 70 c
 71 a
 72 l
 73 d
 74 o
 75 m
 76 a
 77 i
 78 n
 79 4
 80 第2行 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 81 第1个单词 ::1
 82 :
 83 :
 84 1
 85 第2个单词 localhost
 86 l
 87 o
 88 c
 89 a
 90 l
 91 h
 92 o
 93 s
 94 t
 95 第3个单词 localhost.localdomain
 96 l
 97 o
 98 c
 99 a
100 l
101 h
102 o
103 s
104 t
105 .
106 l
107 o
108 c
109 a
110 l
111 d
112 o
113 m
114 a
115 i
116 n
117 第4个单词 localhost6
118 l
119 o
120 c
121 a
122 l
123 h
124 o
125 s
126 t
127 6
128 第5个单词 localhost6.localdomain6
129 l
130 o
131 c
132 a
133 l
134 h
135 o
136 s
137 t
138 6
139 .
140 l
141 o
142 c
143 a
144 l
145 d
146 o
147 m
148 a
149 i
150 n
151 6
152 第3行 10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com
153 第1个单词 10.0.0.1
154 1
155 0
156 .
157 0
158 .
159 0
160 .
161 1
162 第2个单词 mirrors.aliyuncs.com
163 m
164 i
165 r
166 r
167 o
168 r
169 s
170 .
171 a
172 l
173 i
174 y
175 u
176 n
177 c
178 s
179 .
180 c
181 o
182 m
183 第3个单词 mirrors.aliyun.com
184 m
185 i
186 r
187 r
188 o
189 r
190 s
191 .
192 a
193 l
194 i
195 y
196 u
197 n
198 .
199 c
200 o
201 m
202 第4行 10.0.0.180 clsn
203 第1个单词 10.0.0.180
204 1
205 0
206 .
207 0
208 .
209 0
210 .
211 1
212 8
213 0
214 第2个单词 clsn
215 c
216 l
217 s
218 n

 

瞩目那里的case * 并不是独具,而是输入值不在case中,也正是default.
在循环中能够利用continue/break等主要字,十三分左近java等别的语言的循环。

注:echo-e启用转义字符反斜线的编写翻译器,上边命令启用-e  \n\t彰显效果

壹.四.伍 eval 命令用法

[root@clsn ~]# clsn=6
[root@clsn ~]# echo {1..$clsn}
{1..6}
[root@clsn ~]# eval echo {1..$clsn}
1 2 3 4 5 6

   eval 命令的注解

 

[root@clsn ~]# help eval
eval: eval [参数 ...]
    将参数作为 shell 命令执行。

    将 ARGs 合成一个字符串,用结果作为 shell 的输入,
    并且执行得到的命令。

    退出状态:
    以命令的状态退出,或者在命令为空的情况下返回成功。

 

回来顶部

四).脚本之间相互引用

home88一必发 14

1.5 break continue exit return

规范化与巡回调节及顺序重回值命令表 

命令

说明

break n   

如果省略n,则表示跳出整个循环,n表示跳出循环的层数

continue n

如果省略n,则表示跳过本次循环,忽略本次循环的剩余代码,进人循环的下一次循环。 n表示退到第n层继续循环

exit n

退出当前Shell程序,n为上一次程序执行的状态返回值。n也可以省略,在下一个Shell里可通过"$?"接收exit n的n值

return n

用于在函数里作为函数的返回值,以判断函数执行是否正确。在下一个Shell里可通过"$?"接收exit n的n值

简单来说即:
break    跳出循环
continue 跳出本次循环
exit     退出脚本
return   与 exit 相同,在函数中使用

透过source 只怕 . 的方法得以引用另一个本子中的函数也许变量

Echo命令和大括号混合使用办法

一.伍.一 break命令表明

 

[root@clsn scripts]# help break 
break: break [n]
    退出 for、while、或 until 循环

    退出一个 FOR、WHILE 或 UNTIL 循环。如果指定了N,则打破N重
    循环

    退出状态:
    退出状态为0除非 N 不大于或等于 1。

 

  测试脚本内容

#!/bin/bash

for i in {1..5}

do

if [ $i -eq 3 ]

then

break

fi

echo $i

done

echo “ok”
break 测试脚本

 

 1 #!/bin/bash
 2 
 3 for i in {1..5}
 4 
 5   do
 6 
 7     if [ $i -eq 3 ]
 8 
 9       then
10 
11        break
12 
13     fi
14 
15     echo $i
16 
17 done
18 
19 echo "ok"

 

  脚本实行结果

[root@clsn scripts]# sh break.sh 
    1
    2
    ok

first.sh

home88一必发 15

1.5.贰 continue命令表明

 

[root@clsn scripts]# help continue 
continue: continue [n]
    继续 for、while、或 until 循环。

    继续当前 FOR、WHILE 或 UNTIL 循环的下一步。
    如果指定了 N, 则继续当前的第 N 重循环。

    退出状态:
    退出状态为 0 除非 N 不大于或等于1。

 

  测试脚本内容

#!/bin/bash
for i in {1..5}
do
if [ $i -eq 3 ]
then
continue
fi
echo $i
done
echo “ok”
continue 测试脚本

 

 1 #!/bin/bash
 2     for i in {1..5}
 3       do
 4         if [ $i -eq 3 ]
 5           then 
 6             continue
 7         fi
 8         echo $i
 9     done
10     echo "ok"

 

  脚本实践结果

[root@clsn scripts]# sh continue.sh 
1
2
4
5
ok

function fun(){
 echo “i am from first.”
}

curl命令用法计算:

一.伍.三 exit命令表明

[root@clsn scripts]# help exit
exit: exit [n]
    退出shell。

    以状态 N 退出 shell。  如果 N 被省略,则退出状态
    为最后一个执行的命令的退出状态。

  测试脚本内容

#!/bin/bash
for i in {1..5}
do
if [ $i -eq 3 ]
then
exit
fi
echo $i
done
echo “ok”
exit 测试脚本

 

 1     #!/bin/bash
 2     for i in {1..5}
 3       do
 4         if [ $i -eq 3 ]
 5           then 
 6             exit
 7         fi
 8         echo $i
 9     done
10     echo "ok"

 

  脚本实行结果

    [root@clsn scripts]# sh exit.sh 
    1
    2

file=firstsecond.sh

curl的选项意义:

1.5.4 return命令表达

 

[root@clsn tuichu]# help return 
return: return [n]
    从一个 shell 函数返回。

    使一个函数或者被引用的脚本以指定的返回值 N 退出。
    如果 N 被省略,则返回状态就是
    函数或脚本中的最后一个执行的命令的状态。

    退出状态:
    返回 N,或者如果 shell 不在执行一个函数或引用脚本时,失败。

 

回到顶部

. first.sh
fun

不带任何参数时 curl 将再次来到钦赐url中的数据并打字与印刷在显示屏上

1.六 shell中的数组

echo $file
利用bash +x second.sh实践,在second.sh 中得以调用fun函数和采纳file变量。

-u 使用用户名和密码登入。如curl -uname:passwd UHummerH贰L

一.陆.1 为何会发生Shell数组

  常常在支付Shell脚本时,定义变量选择的花样为“a=l;b=二;C=三”,可假设有四个变量呢?那时再每一种地定义就会很棘手,并且只要有七个不分明的变量内容,也会难以
实行变量定义,别的,急速读取分歧变量的值也是1件很忧伤的事体,于是数组就诞生
了,它正是为着消除上述难题而出现的。

此地的.和source都得以兑现引用first文件中的变量。注意:
假若同时援引了四个本子的同贰个变量名的变量,前边的值会覆盖后边的变量而不会报错。
5).关于错误管理

-b/–cookie  <name=data>  
向服务器交由cookie,若无=则name视为文件名,举个例子:curl -b cookie.txt
www.jbxue.com

1.6.2 什么是Shell数组

  Shell的数组正是3个要素集结,它把轻松个成分(变量或字符内容)用3个名字来
命名,然后用号码对它们进行区分。那个名字就称为数组名,用于区分分裂内容的编
号就称为数组下标。组成数组的1一要素(变量)称为数组的成分,有时也称之为下标变量。

a)在shell中有叁个变量 $?
,这一个变量记录的是上次剧本施行的结果,假设符合规律甘休则是0,不然是非0值;

-o out 
将钦命curl再次回到保存为out文件,内容从html/jpg到各个MIME类型文件。如curl -o
page.html USportageL

一.6.叁 数组中的增加和删除改查

数组的概念

 

# 定义数组
[root@clsn scripts]# stu=(001 002 003)
# 打印数组
[root@clsn scripts]# echo ${stu[@]}
001 002 003
# 显示数组长度
[root@clsn scripts]# echo ${#stu}
3

 

*查: **遍历数组的始末*

 

# 打印数组内容(通过数组下标或索引)
[root@clsn scripts]# echo ${stu[0]}
001
[root@clsn scripts]# echo ${stu[1]}
002
[root@clsn scripts]# echo ${stu[2]}
003
[root@clsn scripts]# echo ${stu[3]}

# 遍历数组
  方法一
[root@clsn scripts]# for i in ${stu[@]};do echo $i ;done 
001
002
003
    # 方法二
[root@clsn scripts]# array=(1 2 3 4 5)
[root@clsn scripts]# for i in `eval echo {1..${#array[@]}}`;do echo ${array[i-1]};done
1
2
3
4
5

 

*增**:数组加多*

[root@clsn scripts]# stu[3]=004
[root@clsn scripts]# echo ${stu[@]}
001 002 003 004

数组修改

[root@clsn scripts]# stu[2]=000
[root@clsn scripts]# echo ${stu[@]}
001 002 000 004

数组删除

[root@clsn scripts]# unset stu[2]
[root@clsn scripts]# echo ${#stu[@]}
3
[root@clsn scripts]# echo ${stu[@]}
001 002 004

b)假如在shell脚本中通过set -o
errexit来达成境遇错误就淡出,那样能够免止发生更加多的谬误;

-d <key=value>  向服务器POST表单数据 举例:curl -d
“order=11一&count=二”

一.陆.四 将下令的结果赋值给数组

dir=(`ls`)
dir=($(ls))

一声令下定义数组

 

[root@clsn scripts]# COM=(`ls`)
[root@clsn scripts]# echo ${COM[@]}
bianliang.sh case cfb.sh chanshu.sh check check_url.sh 
clsn.sh clsn_test.sh daojishi.sh ddos_check.sh echo.sh for for2 fruits.sh
function fz.sh html jingdutiao.sh jishuanqi2.sh jishuanqi.sh lamp.sh lnmp.sh 
memcache_check.sh menu.sh nginx.sh panduan panduan1 play quanju.sh rsync_check.sh 
rsyncd system6 tuichu web_check.sh web_view.sh while xiugaizhuji.sh yhk.sh yunshuan.sh 
zhuajiu.sh

 

c)在shell实施进度中一旦出错,能够因而重定向的措施,输出到文件中,举个例子Command
>> filename2>&一

-A/–user-agent  <ua>  内定发送请求的用户代理,比方:curl -A
My-Agent/一.0.0 www.jbxue.com 

一.陆.一 数组定义格式

 

[root@clsn scripts]# a=(1 2 3 )
[root@clsn scripts]# b=(1
> 2
> 3
> 4
> )
[root@clsn scripts]# echo ${a[@]}
1 2 3
[root@clsn scripts]# echo ${b[@]}
1 2 3 4

 

6).字典

-x  ip:port 钦定使用的http代理,举个例子:curl -x 1玖贰.16⑧.一.一:8080
www.jbxue.com

1.陆.二 数组的面目正是三个变量,只是这几个变量存了五个值

在shell 常用的法力是查

   array=(valuel value2 value3 …)

打字与印刷数组格式

${array[@]} 所有元素
${#array[@]}  数组长度
${array[i]}  单个元素,i是下标

shell中的字典是丰硕好的数据结构,能够很有益地拍卖配置

-D head.txt 
将服务器的归来的header保存为文件,底部的cookie也可被封存,举例:curl -D
header.txt www.jbxue.com  

1.6.三 【演练题】批量反省三个网址地址是不是平常

要求:

  1、使用shell数组方法完结,检查评定攻略尽量模拟用户访问。

  二、每10分钟做一回具备的检验,不只怕访问的出口报警。

  3、待检查评定的地方如下

    

    

    

    

剧本内容:

[root@clsn scripts]# cat check_url.sh
#!/bin/bash
#############################################################
# File Name: check_url.sh
# Version: V1.3
# Author: clsn
# Organization:
# Created Time : 2017-12-12 10:44:39
# Description:
#############################################################
url=(

)
while true
do
for i in ${url[@]}
do
#curl $i &>/dev/null
a=$(curl -I -w “%{http_code}\n” -o /dev/null -s $i)
if [ $a -ne 200 ]
then
echo “$url 异常”
fi
done
sleep 10
done
批量检查多少个网址地址是不是正规

 

 1 [root@clsn scripts]# cat check_url.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: check_url.sh
 5 # Version: V1.3
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-12 10:44:39
 9 # Description:
10 #############################################################
11 url=(
12 http://www.cnblogs.com/clsn/
13 http://blog.znix.top
14 http://blog.nmtui.com
15 http://10.0.0.7
16 )
17 while true 
18   do
19     for i in ${url[@]} 
20       do 
21       #curl $i &>/dev/null
22       a=$(curl -I -w "%{http_code}\n" -o /dev/null -s $i)
23       if [ $a -ne 200 ]
24         then
25           echo "$url 异常"
26       fi
27     done
28     sleep 10
29 done

 

重回顶部

#!/bin/bash

假定时待从地点文件中赢得表单数据,则在文书名前加@ ,比方:curl -d
@data.xml

1.7 Shell 函数

  shell二个极度首要的风味是它可看成一种编制程序语言来行使。因为shell是二个解释器,所以它不能够对为它编写的顺序开始展览编写翻译,而是在每一遍从磁盘加载那么些程序时对它们进行分解。而先后的加载和分解都以越发耗费时间的。

   针对此难题,诸多shell(如BourneAgainShell)都包涵shell函数,shell把那些函数放在内部存款和储蓄器中,那样每一趟必要奉行它们时就不用再从磁盘读入。shell还以1种内部格式来存放在那个函数,那样就无需开支大批量的年华来注解它们。

         函数的功效即使把程序里反复调用一样代码的一些概念成一份,然后起个名字,全部的调用都
只用这名字就足以了,修改代码时,只必要改变函数体内的代码就能够。

set -o errexit

若希望从专门的学问输入获取则用 curl -d “name=username&passwd=pwd”

一.七.1 使用函数的优势

    把一样的程序段定义成函数,可以减小代码量。

    扩展程序的可读、易读性

    落成程序功效的模块化

hput(){
 eval “hkey_$1″=”$2”
}

-L 当页面有跳转的时候,输出跳转到的页面

一.七.2 定义函数

 

function clsn(){
    echo "http://blog.znix.top"
}

znix(){
    echo "http://www.znix.top " 
}

 

说明:

  1、能够带function clsn() 定义,也足以直接clsn() 定义,不带其余参数。

  二、参数重返,能够突显加:return
重临,假设不加,将以最终一条命令运营结果,作为重临值。
return后跟数值n(0-25五)

  3、实行函数便是将函数名放到定义的函数之后就能够

将函数加载到当前窗口举行:

 

[root@clsn function]# . fun1.sh 
[root@clsn function]# zn
znew  znix  
[root@clsn function]# znix 
test
[root@clsn function]# clsn 
http://blog.znix.top

 

hget(){
 eval echo ‘${‘”hkey_$1″‘}’
}

-I  header新闻  当有跳转时,可以透过 curl -L -I U福睿斯L|grep Location
来规定跳转到的新url地址

1.7.3 引用函数

剧本内容

 

[root@clsn function]# cat  fun2.sh 
#!/bin/bash
#############################################################
# File Name: fun2.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-11 19:25:56
# Description:
#############################################################
Fun_File=/server/scripts/function/fun1.sh
[ -f $Fun_File ] && . $Fun_File
clsn

 

剧本奉行结果

[root@clsn function]# sh  fun2.sh
http://blog.znix.top

hput k1 v1
hget k1

-c <file>保存服务器的cookie文件

一.7.四 函数传参

剧本内容:

 

[root@clsn function]# cat fun3.sh 
#!/bin/bash
#############################################################
# File Name: fun3.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 09:38:48
# Description:
#############################################################

function clsn(){
    echo "Hi "
}
CLSN(){
    echo "Hello "
    echo  $0
    echo  $1
    echo  $2

}
clsn
CLSN xi  xi 

 

剧本实行结果

[root@clsn function]# sh fun3.sh 
Hi 
Hello 
fun3.sh
xi
xi

declare -A dic

-e url  设置引用头的值

一.7.5 $0 永恒的台本名称

 

function clsn(){
    echo "http://blog.znix.top $1 $2"
    echo $0
}

znix(){
    echo "test" 
}
clsn $1 $2

 

实施结果

[root@clsn function]# sh  fun1.sh 
http://blog.znix.top  
fun1.sh

dic=([key1]=”value1″ [key2]=”value2″ [key3]=”value3″)

-T localfile  向服务器PUT文件 比如:curl -T 一.mp三 
www.jbxue.com/upload.php

1.7.6 函数中return的用法

本子内容:

 

[root@clsn function]# cat  fun3.sh 
#!/bin/bash
#############################################################
# File Name: fun3.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 09:38:48
# Description:
#############################################################

function clsn(){
    echo "Hi "
}
CLSN(){
    echo "Hello "
    echo  $0
    echo  $1
    echo  $2
    return 4
    echo "xxixiixxiix"

}
clsn
CLSN xi  xi 
echo $?

 

本子实行结果

 

[root@clsn function]# sh fun3.sh
Hi 
Hello 
fun3.sh
xi
xi
4

 

return命令表明:

 

[root@clsn function]# help return 
return: return [n]
    从一个 shell 函数返回。

    使一个函数或者被引用的脚本以指定的返回值 N 退出。
    如果 N 被省略,则返回状态就是
    函数或脚本中的最后一个执行的命令的状态。

    退出状态:
    返回 N,或者如果 shell 不在执行一个函数或引用脚本时,失败。

 

echo ${dic[“key1”]}
# output all key
echo ${!dic[*]}
#outpull all value
echo ${dic[*]}
# access all
for key in $(echo ${!dic[*]})
do
        echo “$key : ${dic[$key]}”
done
进行之后,输出如下:

-F <key=value>向服务器POST表单,比如:curl -F
“web=@index.html;type=text/html” url.com

一.7.七 自定义常用函数库

#!/bin/bash
#############################################################
# File Name: /server/scripts/userfun.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-12 10:40:04
# Description:
#############################################################

# 脚本起先化
function scripts_init(){
prog=`basename $0 .sh`
LockFile=/var/lock/subsys/${prog}.lock # 使用锁文件
LogFile=/var/log/${prog}.log # 脚本记录日志
PidFile=/var/run/${prog}.pid # 记录进度号,能够管理脚本

[ -f $LockFile ] && echo “There $LockFile is exist!!” && exit 1
||touch $LockFile
[ ! -f $LogFile ] && touch $LogFile
[ -f $PidFile ] && echo “There $PidFile is exist!!” && exit 2|| echo
$$ > $PidFile
}

# 记录日志
function writelog(){
Date=$(date “+%F_%T”)
ShellName=`basename $0`
Info=$1
echo “$Date : ${ShellName} : ${Info}” >> ${LogFile}
}

# 脚本退出扫尾
function closeout(){
[ -f $LockFile ] && rm -f $LockFile
[ -f $PidFile ]&& rm -f $PidFile
}

# 判定输入是整数
function int_judge(){
fun_a=$1
expr $fun_a + 1 &>/dev/null
RETVAL=$?
return $RETVAL
}

# 剖断输入非空
function input_judge(){
RETVAL=0
fun_a=$1
[ ${#fun_a} -eq 0 ]&& RETVAL=1
return $RETVAL
}
自定义函数库脚本

 

 1 #!/bin/bash
 2 #############################################################
 3 # File Name: /server/scripts/userfun.sh
 4 # Version: V1.0
 5 # Author: clsn
 6 # Organization: http://blog.znix.top
 7 # Created Time : 2017-12-12 10:40:04
 8 # Description:
 9 #############################################################
10 
11 # 脚本初始化
12 function scripts_init(){
13   prog=`basename $0 .sh`
14   LockFile=/var/lock/subsys/${prog}.lock  # 使用锁文件
15   LogFile=/var/log/${prog}.log  # 脚本记录日志
16   PidFile=/var/run/${prog}.pid  # 记录进程号,可以管理脚本
17 
18   [ -f $LockFile ] && echo "There $LockFile is exist!!" && exit 1 ||touch $LockFile
19   [ ! -f $LogFile ] && touch $LogFile
20   [ -f $PidFile ] && echo "There $PidFile is exist!!" && exit 2|| echo $$ > $PidFile
21 }
22 
23 # 记录日志
24 function writelog(){
25   Date=$(date "+%F_%T")
26   ShellName=`basename $0`
27   Info=$1
28   echo "$Date : ${ShellName} : ${Info}" >> ${LogFile}
29 }
30 
31 # 脚本退出扫尾
32 function closeout(){
33   [ -f $LockFile ] && rm -f $LockFile 
34   [ -f $PidFile ]&& rm -f $PidFile
35 }
36 
37 # 判断输入是整数
38 function int_judge(){
39   fun_a=$1
40   expr $fun_a + 1 &>/dev/null
41   RETVAL=$?
42   return $RETVAL
43 }
44 
45 # 判断输入非空
46 function input_judge(){
47   RETVAL=0
48   fun_a=$1
49   [ ${#fun_a} -eq 0 ]&& RETVAL=1
50   return $RETVAL
51 }

 

basename命令

         抽取文件名称

[root@clsn function]# basename /server/scripts/zhuajiu.sh 
zhuajiu.sh
[root@clsn function]# basename /server/scripts/zhuajiu.sh  .sh 
zhuajiu

$$ 参数

         收取脚本运维时的pid, 脚本运转的眼下历程ID号

[root@clsn function]# echo $$
37208
[root@clsn function]# ps -ef |grep 37208
root      37208  37206  0 08:39 pts/0    00:00:00 -bash
root      38578  37208  1 10:33 pts/0    00:00:00 ps -ef
root      38579  37208  0 10:33 pts/0    00:00:00 grep --color=auto 37208

引用自定义函数库示例:

 

[root@clsn function]# head -22  fun3.sh 
#!/bin/bash
#############################################################
# File Name: fun3.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 09:38:48
# Description:
#############################################################

. /server/scripts/userfun.sh

scripts_init 
i=1
while ((i<=10))
  do 
   uptime
   ((i++))
   sleep 1
done
closeout

 

回去顶部

v1
value1
key3 key2 key1
value3 value2 value1
key3 : value3
key2 : value2
key1 : value1
7).文本甩卖

-E cert.pem  钦赐地点证书

一.八 shell脚本的调节和测试

sed 命令能够对对文本实行操作。

-H <header:value>  为HTTP请求设置大四header及值。如curl -H
“Connection:keep-alive”

一.八.壹 脚本调节和测试才干

  调节和测试才具1:使用dos二unix管理脚本

从windows编辑的脚本到Linux下需要使用这个命令
dos2unix windows.sh

  调试才具二:使用echo命令调节和测试

在变量读取或修改的前后加入echo $变量,也可在后面使用exit退出脚本,这样可以不用注释后面的代码

  调试技能三:sh -x 脚本  ==》全局调试

sh -x  scripts.sh

  调试本领四:局部调节和测试

set -x
要调试的脚本内容
set +x

诸如有3个文书sedfile,内容如下:

-X/–request method 用户定义的HTTP请求方法名如 curl -X GET www.baidu.com

一.捌.二 Shell调节和测试本领总括

  壹要记得第二用dos贰unix对台本格式化。

  贰直接施行脚本遵照报错来调治,有时报错不标准。

  叁sh -x调节和测试整个脚本,呈现试行进度。

  四set -x和set +x调试部分脚本(在剧本中装置)

  伍echo输出变量及相关内容,然后紧跟着exit退出,不推行后边程序的不二秘技,一步步跟踪脚本,对于逻辑错误相比较好用。

       写法: echo $var;exit 

  6最要紧的是语法熟识、编码习于旧贯、编制程序观念,将错误扼杀在发芽之中,缓慢解决调节和测试负责,提高成效。

回到顶部

1
2
3
4
伍奉行 “sed ‘一,三d’ sedfile,则会输出肆,5两行,即对1,2,三行做了删除管理,注意那时文件之中并从未删掉那两行。

–compressed 接纳压缩方式收取重返数据

一.9 shell编制程序演练题

除去剔除之外,还是能够做替换操作。

–connect-timeout <s>设置超时时间

1.玖.一 【演练题一】shell实现抓阄程序

急需运用shell编写3个抓阄的先后:

要求:

  1、试行脚本后,输入英文名字全拼,产生随机数0一-9九里边的数字,数字越大评分就去高,前边早已抓到的数字,下次不可能在出现雷同数字。

  2、第三个输入名字后,显示屏输出音讯,并将名字和数字记录到文件里,程序不能够脱离继续伺机外人输入。

         脚本内容:

[root@clsn scripts]# cat zhuajiu.sh
#!/bin/bash
#############################################################
# File Name: zhuajiu.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-10 15:21:27
# Description:
#############################################################
Randow_Temp=/tmp/randow.test
name_Out_File1=/tmp/name_Out_File1.test
name_Out_File2=/tmp/name_Out_File2.test

>$name_Out_File1
>$name_Out_File2
>$Randow_Temp

trap ‘echo “请勿使用 Ctrl+c”‘ 贰

Randow() {
sum=`echo $RANDOM |cut -c-2`
grep $sum $Randow_Temp
if [ $? -eq 0 ];then
Randow
else
echo $sum >>$Randow_Temp
daxiao=$sum
fi
}

Print() {
read -p “请输入名字的拼音:” Name
Randow
echo $Name $daxiao >>$name_Out_File
}

while true
do
clear
echo “”
echo -e “\033[3二m
那个程序会将随便数字排行前3的同班体现出来!\033[0m”
echo -e “\033[3一m 退出脚本请使用 ‘exit’ \033[0m”
echo “”
head -4 $name_Out_File2
read -p “请输入名字的拼音:” “Name”
if [ “$Name” == exit ]
then
exit
fi
Randow
echo $daxiao $Name >>$name_Out_File1
echo “随机数最大的四人同学是:” >$name_Out_File2
sort -k1 -r $name_Out_File1 |column -t >>$name_Out_File2
clear
done
抓阄程序 脚本

 

 1 [root@clsn scripts]# cat zhuajiu.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: zhuajiu.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-10 15:21:27
 9 # Description:
10 #############################################################
11 Randow_Temp=/tmp/randow.test
12 name_Out_File1=/tmp/name_Out_File1.test
13 name_Out_File2=/tmp/name_Out_File2.test
14 
15 >$name_Out_File1
16 >$name_Out_File2
17 >$Randow_Temp
18 
19 trap 'echo "请勿使用 Ctrl+c"' 2
20 
21 Randow() {
22     sum=`echo $RANDOM |cut -c-2`
23     grep $sum  $Randow_Temp
24     if [ $? -eq 0 ];then
25       Randow
26     else
27       echo $sum >>$Randow_Temp
28       daxiao=$sum
29     fi
30 }
31 
32 Print() {
33     read -p "请输入名字的拼音:" Name 
34     Randow
35     echo $Name $daxiao >>$name_Out_File
36 }
37 
38 while true
39 do
40    clear
41    echo ""
42    echo -e  "\033[32m        这个程序会将随机数字排名前三的同学显示出来!\033[0m"
43    echo -e  "\033[31m                     退出脚本请使用 'exit' \033[0m" 
44    echo ""
45    head -4 $name_Out_File2
46    read -p "请输入名字的拼音:" "Name"
47       if [ "$Name" == exit ]
48         then 
49           exit
50       fi
51    Randow
52    echo  $daxiao $Name >>$name_Out_File1
53    echo "随机数最大的三位同学是:"  >$name_Out_File2
54    sort -k1 -r $name_Out_File1 |column  -t >>$name_Out_File2
55    clear
56 done

 

剧本执行进程

 

root@Ubuntu:~/codelab#
sed ‘s/1/0/g’ sedfile
0
2
3
4
5
root@ubuntu:~/codelab# cat sedfile
1
2
3
4
伍大家发掘,在出口时,将1替换来了0;

-v 详细输出,包括呼吁和响应的首部

1.9.2 【练习题2】输出9×9 乘法表

剧本内容:

[root@clsn scripts]# cat cfb.sh
#!/bin/bash
#############################################################
# File Name: cfb.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-11 15:40:03
# Description:
#############################################################
for a in `seq 1 9`
do
for b in `seq 1 9`
do
if [ $a -ge $b ]
then
echo -en “$a x $b = $(expr $a \* $b) ”

fi
done
echo ” “
done
九九乘法表

 

 1 [root@clsn scripts]# cat cfb.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: cfb.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-11 15:40:03
 9 # Description:
10 #############################################################
11 for a in `seq 1 9`
12 do
13         for b in `seq 1 9`
14         do
15                 if [ $a -ge $b ]
16                 then
17                         echo -en "$a x $b = $(expr $a \* $b)  "
18  
19                 fi
20         done
21 echo " "
22 done

 

实行结果

 

[root@clsn scripts]# sh  cfb.sh 
1 x 1 = 1   
2 x 1 = 2  2 x 2 = 4   
3 x 1 = 3  3 x 2 = 6  3 x 3 = 9   
4 x 1 = 4  4 x 2 = 8  4 x 3 = 12  4 x 4 = 16   
5 x 1 = 5  5 x 2 = 10  5 x 3 = 15  5 x 4 = 20  5 x 5 = 25   
6 x 1 = 6  6 x 2 = 12  6 x 3 = 18  6 x 4 = 24  6 x 5 = 30  6 x 6 = 36   
7 x 1 = 7  7 x 2 = 14  7 x 3 = 21  7 x 4 = 28  7 x 5 = 35  7 x 6 = 42  7 x 7 = 49   
8 x 1 = 8  8 x 2 = 16  8 x 3 = 24  8 x 4 = 32  8 x 5 = 40  8 x 6 = 48  8 x 7 = 56  8 x 8 = 64   
9 x 1 = 9  9 x 2 = 18  9 x 3 = 27  9 x 4 = 36  9 x 5 = 45  9 x 6 = 54  9 x 7 = 63  9 x 8 = 72  9 x 9 = 81

 

文本管理还有3个分外强劲的工具-awk

–retry num

一.玖.叁 【演习题三】消除dDOS攻击生产案例

  写2个Shell脚本化解DOS攻击生产案例。

  请根据web日志只怕只怕网络连接数,监察和控制当有些IP并发连接数大概临时内PV达到十0(读者根据实际景况设定),即调用防火墙命令封掉对应的IP。防火墙命令为:iptables-I
INPUT -s IP地址 -j DROP。

演习使用日志下载地址:

         脚本内容:

[root@clsn while]# cat ddos_check.sh
#!/bin/bash
#############################################################
# File Name: ddos_check.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-10 12:34:15
# Description:
#############################################################

Info_File=/tmp/ddos_check.log

#从连接数获取
#netstat -lant|awk -F “[ :]+” ‘/180:80/{clsn[$6]++}END{for(pol in
clsn)print pol,clsn[pol]}’ >$Info_File

# 从日记获取
awk ‘{hotel[$1]++}END{for(pol in hotel)print pol,hotel[pol]}’
access.log|sort -nk2 -r >$Info_File

while read line
do
Ip_Add=`echo $line |awk ‘{print $1}’`
Access=`echo $line |awk ‘{print $2}’`
if [ $Access -ge 10000 ]
then
#echo $Ip_Add
iptables -I INPUT -s $Ip_Add -j DROP
fi
done <$Info_File
消除dDOS攻击脚本

 

 1 [root@clsn while]# cat ddos_check.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: ddos_check.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-10 12:34:15
 9 # Description:
10 #############################################################
11 
12 Info_File=/tmp/ddos_check.log
13 
14 #从连接数获取
15 #netstat -lant|awk -F "[ :]+" '/180:80/{clsn[$6]++}END{for(pol in clsn)print pol,clsn[pol]}' >$Info_File
16 
17 # 从日志获取
18 awk '{hotel[$1]++}END{for(pol in hotel)print pol,hotel[pol]}' access.log|sort -nk2  -r  >$Info_File
19 
20 while read line 
21 do 
22     Ip_Add=`echo $line |awk '{print $1}'`
23     Access=`echo $line |awk '{print $2}'`
24     if [ $Access -ge 10000 ]
25     then
26         #echo $Ip_Add
27         iptables -I INPUT -s $Ip_Add -j DROP
28     fi
29 done <$Info_File

 

剧本推行结果:

 

[root@clsn while]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination  
DROP       all  --  112.64.171.98        anywhere     
DROP       all  --  58.220.223.62        anywhere     

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination  

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

 

其他措施举办日志分析

  elk日志分析

    

  nginx-WAF

    

笔者们第二看望awk的基本管理-根据逗号(,)分割获取想要的文件;

–retry timeo 钦命重试的次数和间隔

一.九.四 【演练题四】开采脚本侵袭检查实验与报警案例(入侵检查评定种类)

  监察和控制web站点目录(/var/html/www)下具有文件是不是被恶意曲解(文件内容被改了),假诺有就打字与印刷改造的公文名(发邮件),定时职务每叁分钟实践一回。

  IDS是英文“Intrusion Detection
Systems”的缩写,中文意思是“凌犯检验系统”。

  脚本内容

先是个里程碑:生成md伍验证文件

文件的校验文件

find /var/html/www/* -type f |xargs md5sum >/tmp/check/web_file_check.md5sum

目录的校验文件

tree /var/html/www/ -d  >/tmp/check/web_dir_check.txt
md5sum /tmp/check/web_dir_check.txt
md5sum /tmp/check/web_dir_check.txt >/tmp/check/web_dir_check.md5sum

剧本内容

[root@clsn check]# cat web_file_check.sh
#!/bin/bash
#############################################################
# File Name: web_file_check.sh
# Version: V1.0
# Author: clsn
# Organization:
# Created Time : 2017-12-10 14:15:34
# Description:
#############################################################

Url1=
Url2=
Dir=/tmp/check/
Web_Dir=/var/html/www/
Check_File1=/tmp/check/web_file_check.md5sum
Check_File2=/tmp/check/web_dir_check.md5sum
Check_Dir=/tmp/check/web_dir_check.txt
Check_Out=/tmp/check/check_out.md5sum
Mail_info=/tmp/check/mail.txt
Date=`date +%F_%T`
Host_Name=`hostname`
Host_IP=`hostname -I`
Email_Addr=995701749@qq.com

[ -d $Dir ] || mkdir -p $Dir
if [ ! -f $Check_File1 ]
then
cd $Dir &&\
wget $Url1
elif [ ! -f $Check_File2 ]
then
cd $Dir &&\
wget $Url2
fi

md5sum -c $Check_File1 >$Check_Out 2>/dev/null
Back_num1=$?
tree -d $Web_Dir >$Check_Dir
md5sum -c $Check_File2 &>/dev/null
Back_num2=$?
if [ $Back_num1 -ne 0 ]
then
echo “爆发主机:$Host_Name 主机IP地址:$Host_IP” > $Mail_info
echo “在 $Date 的检查评定中发现以下文件被歪曲” >>$Mail_info
echo “==================================================”
>>$Mail_info
egrep -i “失败|failed” $Check_Out >>$Mail_info
echo “==================================================”
>>$Mail_info
echo “请及早登录服务器实行管理!!!” >>$Mail_info
mail -s “【警告】web站点文件被歪曲” -a $Check_File1 $Email_Addr
<$Mail_info
fi

if [ $Back_num2 -ne 0 ]
then
echo “目录检查测试消息” >$Mail_info
echo “在 $Date 的检查实验中开采目录被歪曲” >>$Mail_info
mail -s “【警告】web站点目录被曲解” -a $Check_Dir
$Email_Addr<$Check_Dir
fi
凌犯检查评定与报告警察方

 

 1 [root@clsn check]# cat web_file_check.sh 
 2 #!/bin/bash
 3 #############################################################
 4 # File Name: web_file_check.sh
 5 # Version: V1.0
 6 # Author: clsn
 7 # Organization: http://blog.znix.top
 8 # Created Time : 2017-12-10 14:15:34
 9 # Description:
10 #############################################################
11 
12 Url1=http://10.0.0.1/web_file_check.md5sum
13 Url2=http://10.0.0.1/web_dir_check.md5sum
14 Dir=/tmp/check/
15 Web_Dir=/var/html/www/
16 Check_File1=/tmp/check/web_file_check.md5sum
17 Check_File2=/tmp/check/web_dir_check.md5sum
18 Check_Dir=/tmp/check/web_dir_check.txt
19 Check_Out=/tmp/check/check_out.md5sum
20 Mail_info=/tmp/check/mail.txt
21 Date=`date +%F_%T`
22 Host_Name=`hostname`
23 Host_IP=`hostname -I`
24 Email_Addr=995701749@qq.com
25 
26 [ -d $Dir ] || mkdir -p $Dir
27 if [ ! -f $Check_File1 ] 
28   then 
29     cd $Dir &&\
30     wget $Url1
31 elif [ ! -f $Check_File2 ]
32    then 
33     cd $Dir &&\
34     wget $Url2
35 fi
36 
37 md5sum -c $Check_File1 >$Check_Out  2>/dev/null
38 Back_num1=$?
39 tree -d $Web_Dir >$Check_Dir
40 md5sum -c $Check_File2 &>/dev/null
41 Back_num2=$?
42 if [ $Back_num1 -ne 0 ]
43   then
44     echo "发生主机:$Host_Name  主机IP地址:$Host_IP"  > $Mail_info
45     echo "在 $Date 的检测中发现以下文件被篡改" >>$Mail_info
46     echo "==================================================" >>$Mail_info  
47     egrep  -i  "失败|failed"  $Check_Out >>$Mail_info
48     echo "==================================================" >>$Mail_info  
49     echo "请尽快登陆服务器进行处理!!!"  >>$Mail_info
50     mail -s "【警告】web站点文件被篡改" -a $Check_File1 $Email_Addr <$Mail_info
51 fi
52 
53 if [ $Back_num2 -ne 0 ]
54   then
55     echo "目录检测信息" >$Mail_info
56     echo "在 $Date 的检测中发现目录被篡改" >>$Mail_info
57     mail -s "【警告】web站点目录被篡改" -a $Check_Dir $Email_Addr<$Check_Dir
58 fi

 

修改文件目录后进行理并了结果

 

 

 

root@ubuntu:~/codelab# cat awkfile
this,is,a,awk,file
this,is,a,awk,file
root@ubuntu:~/codelab# cat awkfile | awk -F ‘,’ ‘{print $0}’
this,is,a,awk,file
this,is,a,awk,file
root@ubuntu:~/codelab# cat awkfile | awk -F ‘,’ ‘{print $1}’
this
this
root@ubuntu:~/codelab#
那里大家得以观看awk能够依据自由格局分开文本,然后输出;

–tcp-nodelay 打开TCP_NODELAY选项  不开始展览捎带确认

1.玖.5 【练习题5】单词及字母去重排序案例

用shell管理以下内容

  1、按单词出现频率降序排序!

  2、按字母出现频率降序排序!

the squid project provides a number ofresources to assist users design implement and support squid installations.Please browse the documentation and support sections for more infomation byoldboy training

         脚本内容:

 

[root@clsn play]# cat abc.sh 
#!/bin/bash
#############################################################
# File Name: abc.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-11 17:23:19
# Description:
#############################################################

a="the squid project provides a number ofresources to assist users design implement and support squid installations.Please browse the documentation and support sections for more infomation byoldboy training"

echo "按单词出现频率降序排序!"
for i in $a 
  do 
   echo $i 
done|\
  sort |uniq -c|sort -nk1  -r
echo "按字母出现频率降序排序!"
echo $a |grep -o "[a-z]" |sort|uniq  -c |sort -nk1 -r

 

八).特殊变量和值

-O  按服务器上的名目保存下载的文本

壹.玖.陆 【练习题陆】编写正(或长)方形图形案例

请用shell或Python编写二个正(或长)方形,接收用户输入的数字。

         shell脚本内容

 

[root@clsn play]# cat  zhengfangxing.sh
#!/bin/bash
#############################################################
# File Name: zhengfangxing.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-11 17:33:33
# Description:
#############################################################
trap "echo 输入exit退出" 2
while true
  do
    read -p "你想看多大的正方形:" a
    [ "$a" == "exit" ] && exit 
    expr 1 + $a &>/dev/null  
    [ $? -ne 0 ] && echo "请输入一个数字!" && exit 2
    b="■ "
    d=$(for i in `eval echo {1..$a}`;do echo -n $b; echo -n " ";done)

    for i in `eval echo {1..$a}`
     do
      echo "$d"
    done
done

 

         脚本实行作用

 

[root@clsn play]# sh  zhengfangxing.sh  4
■ ■ ■ ■ 
■ ■ ■ ■ 
■ ■ ■ ■ 
■ ■ ■ ■ 
[root@clsn play]# sh  zhengfangxing.sh  3
■ ■ ■ 
■ ■ ■ 
■ ■ ■

 

再次来到顶部

下列变量平时具有原则性意义

-r/–range  from-to 下载钦定range内的多寡

壹.拾 各个语句小结

  磊 
while循环的看家技能是实践守护进度以及大家期待循环不脱离持续举行,用于频率低于1分钟循环管理(crond),其余的while循环大致都足以被for循环代替。

  磊  
case语句可以被if语句替换,一般在系统运营脚本传入小量永世规则字符串用case语句,其余平常推断多用if。

  磊  一句话,if,for语句最常用,其次while(守护进度),case(服务运行脚本)。

归来顶部

$#    表示变量的个数,常用来循环
$@    当前命令行全部参数。置于双引号中,表示个别参数
$*   
当前命令行全部参数。置于双引号中,表示将命令行全数参数当初三个独立参数
$-(连字号)    在引用数予以Shell的选料
$?    表示上1个限令退出的景观
$$    表示方今经过编号
$0    表示方今先后名称
$!    表示近期一个后台命令的经过编号
$HOME    表示目前用户根目录
$IFS    表示当中的字段分隔符
$LANG    当前locale暗中认可名称
$PATH    情形变量
$PPID    父进度编号
$PWD    当前职业目录下列特殊值能够支持排查难点

-C 在保留文件时进行续传

1.11 附录

0    成功脱离
>0    退出战败
壹-1二伍   
命令退出退步,失利再次回到的相关值由程序定义(譬如,程序内部退休出只进行 exit
二,则赶回为2)
12六    命令找到了,但不可能施行
1二7    命令找不到
>12八    命令因受到数字信号而离世九.定时职分

Wget命令总括:

1.1一.一 格式化文本–对齐文本

 

[root@clsn scripts]# column --help 

用法:
 column [选项] [文件 ...]

选项:
 -c, --columns <宽度>     输出宽度(字符数)
 -t, --table              创建表格
 -s, --separator <字符串> 可用的表格分隔符
 -o, --output-separator <字符串>
                          表格输出列分隔符,默认为两个空格
 -x, --fillrows           先填充行,再填充列

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出

更多信息请参阅 column(1)。

 

windows系统下有按时职责,在linux系统上也一如既往有定期义务。使用系统自带的crontab就可以兑现;

例子:

一.1一.二 服务器被挂马如何做?

  1. 将被挂马服务器上,原有主要数据备份下来
  2. 细心筛查数据,确定保障内部都是平常文件
  3. 重新安装服务器操作系统,并针对性的拉长安防。
  4. 切记,服务器中木马后务必重新安装操作系统。

自己的系统上奉行 cat /etc/crontab的出口如下:

wget  

一.11.三 怎么通过进度找到程序

通过进度找到pid号码

[root@clsn proc]# ps -ef |grep sshd 
root       1294      1  0 09:18 ?        00:00:00 /usr/sbin/sshd -D

         通过pid找到在proc目录下的一时半刻文件夹

[root@clsn proc]# cd /proc/1294
[root@clsn 1294]# 

         查看里面包车型客车exe文件,就可以开采先后文件的渠道

[root@clsn 1294]# ll exe 
lrwxrwxrwx 1 root root 0 12月 11 09:18 exe -> /usr/sbin/sshd

# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don’t have to run the `crontab’
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

参照网站:

1.1一.4 screen程序 幸免脚本施行中断

  用操作,越来越多详细的情况参照 

ctrl +a +d  退出当前终端,返回加载screen前的shell命令状态
screen -ls 可看screen会话
screen -r id 指定进入哪个screen会话

         screen进程原理

 

[root@clsn ~]# ps -ef |grep ping 
root      30170  30153  0 11:57 pts/5    00:00:00 ping 10.0.0.254
root      30172  30078  0 11:58 pts/0    00:00:00 grep --color=auto ping
[root@clsn ~]# ps -ef |grep 30170
root      30170  30153  0 11:57 pts/5    00:00:00 ping 10.0.0.254
root      30174  30078  0 11:59 pts/0    00:00:00 grep --color=auto 30170
[root@clsn ~]# ps -ef |grep 30153
root      30153  30119  0 11:57 pts/5    00:00:00 /bin/bash
root      30170  30153  0 11:57 pts/5    00:00:00 ping 10.0.0.254
root      30176  30078  0 11:59 pts/0    00:00:00 grep --color=auto 30153
[root@clsn ~]# ps -ef |grep 30119
root      30119      1  0 11:56 ?        00:00:00 SCREEN
root      30120  30119  0 11:56 pts/4    00:00:00 /bin/bash
root      30153  30119  0 11:57 pts/5    00:00:00 /bin/bash
root      30178  30078  0 11:59 pts/0    00:00:00 grep --color=auto 30119

 

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

awk命令计算:

1.1壹.5 shell中落到实处倒计时效果

剧本内容

 

[root@clsn scripts]# cat daojishi.sh 
#!/bin/bash
#############################################################
# File Name: daojishi.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-12 08:49:11
# Description:
#############################################################

for i in `seq -w 10 -1 1`
  do
    echo -ne "\b\b$i";
    sleep 1;
done

 

剧本推行职能

 

再次回到顶部

# m h dom mon dow user command
17 * * * * root    cd / && run-parts –report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts
–report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts
–report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts
–report /etc/cron.monthly )
#
从那边我们得以见到cron是怎样选用的,那里设定了cron使用shell,上边是命令的设置方法。

awk -F “|” ‘{print $1}’   file 依照新的相间符“|”实行操作。

一.1二 linux中的复信号

minute: 表示分钟,可以是从0到5九之内的别的整数。
hour:表示小时,可以是从0到二3里边的任何整数。
day:表示日期,能够是从一到31时期的此外整数。
month:表示月份,能够是从一到12里头的其他整数。
week:表示星期几,能够是从0到柒中间的其余整数,那里的0或柒表示礼拜贰。
command:要实行的通令,能够是系统命令,也得以是协和编排的剧本文件。大家能够应用如下一些基础命令;

指令参考地址:

一.1二.1 Linux系统的首要信号及评释

信号

说明

HUP(l)

挂起,通常因终端掉线或用户退出而引发

INT(2)

中断,通常因按下Ctrl+c组合键而引发

QUIT(3)

退出,通常因按下Ctrl+\组合键而引发

ABRT(6)

中止,通常因某些严重的执行错误而引发

ALRM(14)

报警,通常用来处理超时

TERM(15)

终止,通常在系统关机时发送

TSTP(20)

停止进程的运行,但该信号可以被处理和忽略,通常因按下Ctrl+z组合键而引发

   使用trap调控非实信号日常供给忽略的时域信号包蕴HUP、INT、QUIT、TSTP、TEOdysseyM等,对应的实信号编号分别为一、二、三、20、一伍。Shell脚本中既能够用数字来表示实信号,也足以采纳时限信号的名字来代表实信号

一.1二.贰接纳trap调节时域信号

  trap命令用于钦赐在吸收到时域信号后就要利用的行动,复信号的连带注明前面早已提到
过。trap命令的1种普及用途是在本子程序被中止时做到清理专门的职业,也许屏蔽用户私下使用的有些功率信号。在接纳时域信号名时供给轻便SIG前缀。能够在指令提醒符下输人命令
trap -一来查阅实信号的数码及其关联的称谓。

  trap命令的参数分为两有的,前壹部分是收纳到指按时限信号时将在利用的走动,后一片段是要处理的频限信号名。

  trap命令的接纳语法如下:

trap command signal

     
 signal是指接收到的实信号,command是指接受到该信号应利用的行路。也正是:

trap ‘命令;命令’ 信号编号
或
trap ‘命令;命令’ 信号名

[root@clsn ~]# trap 'echo clsn' 2 
[root@clsn ~]# ^Cclsn

回到顶部

usage: crontab [-u user] file
 crontab [ -u user ] [ -i ] { -e | -l | -r }
  (default operation is replace, per 1003.2)
 -e (edit user’s crontab)
 -l (list user’s crontab)
 -r (delete user’s crontab)
 -i (prompt before deleting user’s crontab)10).技巧

一.1三 参考文书档案

http://blog.csdn.net/zhangna20151015/article/details/50293987
https://zh.wikipedia.org/wiki/For迴圈#傳統的_for_迴圈_for-loops 
https://zh.wikipedia.org/wiki/While迴圈
https://www.cnblogs.com/kerrycode/p/6537175.html (生产随机数)
http://blog.51cto.com/lidao/1936495  (不循环,批量创建用户)
http://www.runoob.com/linux/linux-shell-func.html 函数

 

 

本博文中2017年6月7日从前使用的种类版本为: CentOS release 陆.九 (Final)
内核版本为: 贰.陆.3二-6玖陆.10.一.el陆.x八陆_64
            在201七年7月1日之后发表的博文使用的系统版本为: CentOS Linux
release 七.4.170八 (Core) 内核版本为: 叁.十.0-6玖三.el7.x8陆_64

世家只要有怎么样难点得以留言或邮件联系
clsn@nmtui.com,作者看来后会尽快还原。
正文出自 “惨绿少年”
博客,接待转发,但未经小编同意必须保留此段评释,且在篇章页面显著地点给出。
小说来源:http://blog.znix.top

 

a)判别参数是还是不是是数字。

用while循环批量成立用户:

#!/bin/sh
#1. $壹是本子的首先个参数,那里作为awk命令的率先个参数字传送入给awk命令。
#贰. 出于尚未输入文件作为输入流,因此那里只是在BEGIN块中成就。
#三.
在awk中A中华VGV数组表示awk命令的参数数组,ARAV4GV[0]表示命令本身,A君越GV[1]表示第伍个参数。
#4.
match是awk的嵌入函数,重返值为同盟的正则表明式在字符串中(ABMWX五GV[1])的开局地点,未有找到重回0。
#5.
正则表明式的写法已经保障了十一分的字符串一定是10进制的正整数,如必要浮点数或负数,仅需修勘误则就能够。
#六. awk实行到位后将结果回到给isdigit变量,并视作其伊始化值。
#7. isdigit=`echo $1 | awk ‘{ if (match($1, “^[0-9]+$”) != 0) print
“true”; else print “false” }’ `
#8.
地点的写法也能促成该意义,可是由于有多个进度出席,因而成效低于上边的写法。
isdigit=`awk ‘BEGIN { if (match(ARGV[1],”^[0-9]+$”) != 0) print
“true”; else print “false” }’ $1`
if [[ $isdigit == “true” ]]; then
      echo “This is numeric variable.”
      number=$壹fib) 依照系统给变量赋值,确定保证可移植性

Nmap命令计算:

#1.
经过uname命令获取当前的类别名称,之后再依照OS名称的例外,给PING变量赋值分裂的ping命令的完备。
osname=`uname -s`
#二. 得以在case的条件中增添越多的操作系统名称。
case $osname in
      “Linux”)
          PING=/usr/sbin/ping ;;
      “FreeBSD”)
          PING=/sbin/ping ;;
      “SunOS”)
          PING=/usr/sbin/ping ;;
      *)
          ;;
esac
3.总结

nmap 1九二.16八.0.十壹用到ip地址扫描展开的端口

这一个只是shell开拓中的最基础部分,shell
其实是壹种分外神速、庞大的语言,不断学习和积聚一定会愈发熟稔。

命令参考地址:

正文永恒更新链接地址:http://www.linuxidc.com/Linux/2016-10/136040.htm

home88一必发 16

sed命令详解:

sed轻量级的流编辑器。sed主倘诺用来将数据开始展览选用,替换

删去,新扩大的吩咐

sed命令格式: sed [选项]-‘[动作]’文件名

选项:

-n       参预此选项,则会吗经过sed命令管理的行输出的荧屏上

-e      允许对输入数据运用多条sed命令编辑

-i      用sed的修改结果一向下该读取数据的文书,而不是由显示屏输出

动作:

a \:    追加  sed -i ‘一a xixi’ /tmp/haha 在首先行前面追加xixi

c \:    行替换 sed -i ‘二c haha ‘/etc/httpd/conf/httpd.conf
把第一行的始末替换为haha

i \:   插入 sed -i ‘四i haha’ /tmp/haha 在第4行插入haha

d  :   删除 sed -i ‘4d ‘ /tmp/haha 删除第陆行的haha

p  :   打字与印刷,输出钦命的行  sed -n ‘2p’ /tmp/haha
打字与印刷出第一行,输出到荧屏

s  :   字串替换格式为: 行范围s/旧字串/新字串/g  sed -i ‘1s/2/3/g’
1.sh   将率先行的二换为叁

sort /etc/passwd    排序命令

sort -r /etc/passwd   取反

unip去重命令:

其选项意义:
-u 只呈现不重复行。
-d 只显示有再度数据行,每一个重复行只展现在这之中1行
-c 打字与印刷每1重复行出现次数。
-f n为数字,前n个域被忽视。

实战教学:

home88一必发 17

注:编辑数字为了测试

home88一必发 18

专注:uniq -c 命令打字与印刷每趟重复出现的行,并用sort进行排序

home88一必发 19

注:uniq -u命令展现不重复的行

home88一必发 20

注:uniq -d只展现重复的行

home88一必发 21

注:uniq -c -d 组合使用,突显重复的次数

Sort排序命令详解:

-b:忽略每行前面初叶出的空格字符;

-c:检查文件是不是曾经依照顺序排序;

-d:排序时,管理英文字母、数字及空格字符外,忽略其余的字符;

-f:排序时,将小写字母视为大写字母;

-i:排序时,除了040至17陆之内的ASCII字符外,忽略其余的字符;

-m:将多少个排序号的文书实行合并;
-M:将目前一个字母遵照月份的缩写实行排序;

-n:根据数值的高低排序;

-o<输出文件>:将排序后的结果存入制定的文件;

-r:以相反的种种来排序;

-t<分隔字符>:钦点排序时所用的栏位分隔字符;

实战教学:

home88一必发 22

注:实战源文件

home88一必发 23

注:sort命令暗许排序

home88一必发 24

注:sort -r 以相反的依次进行排序

home88一必发 25

注:以上命令是将第1列的数组依据从小到大排列

home88一必发 26

注:以上命令是将第二列的数组依照从大到小排列

for循环和while循环

#! /bin/bash

PREFIX=yangxu

I=0

while [ $I -le 20 ]

do

useradd ${PREFIX}$I

echo “123.com”|passwd –stdin ${PREFIX}$I

let I++

done

用for循环开垦乘法口诀表:

#! /bin/bash

for a in `seq 1 9`

        do

                for b in `seq 1 9`

        do

                if [ $a  -ge $b ]

                        then

                                echo -ne ” $a x $b = $(expr $a \* $b)”

 

fi

done

echo ”       “

 

done

实施效率:

home88一必发 27

循环打字与印刷出壹-10

#! /bin/bash

for i in `seq 10`

do

echo $i

done

奉行效力:

home88一必发 28

双重for循环:

#! /bin/bash

for i in `echo www.`

do

        for b in `echo qq.com qq.cn 163.com 163.cn`

do

echo $i $b     

done

do

进行职能:

home88一必发 29

用for循环来阅览continue和break 和exit的界别

#! /bin/bash

 

for ((i=0 ; i<=6 ; i++))

do

        if [ $i -eq 3 ];then

continue

#break

                #exit

        fi

                echo $i

done

echo “ok”

continue

实践作用:

home88一必发 30

注:continue就是当循环当这么些i=三的时候就跳过本次巡回,直接开始展览下2回巡回

Break奉行功效:

home88一必发 31

注:break假如满意条件直接跳出此循环,输出循环外的参数

exit施行效果:

home88一必发 32

注:exit若是满意条件输出,就会直接跳出脚本

用shell脚本开荒几个布局目前ip的剧本:

#! /bin/bash

case $1 in

  up)

for ((i=0; i<=10; i++))

do

if [ $i -eq 5 ]

        then

                continue

        fi

ifconfig eth0:$i 192.168.0.$i netmask 255.255.255.0 $1

done

;;

  down)

for ((i=0; i<=10; i++))

do

if [ $i -eq 5 ]

        then

                continue

        fi

ifconfig eth0:$i 192.168.0.$i netmask 255.255.255.0 $1

done

;;

  *)

echo “Usage {up | down}”

esac

用shell脚本开采批量开立用户脚本,并用随机数为密码,将用户和密码打印到pw.txt文件中

#! /bin/bash

I=0

PREFIX=user-

while [ $I -le 20 ]

do

PW=`echo $RANDOM|md5sum|cut -c 5-12`

useradd ${PREFIX}$I

echo ${PREFIX}$I $PW >>pw.txt

echo “—————-“>>pw.txt

echo $PW |passwd –stdin ${PREFIX}$I

let I++

done

实行结果:

home88一必发 33

用shell脚本开采2个本子执行菜单

#! /bin/bash

                      echo “脚本配置菜单”

echo “一.设置配置服务”

echo “2.创制删除用户”

echo “三.安插互联网”

echo “请输入要奉行的美食指南命令(八分之四/三):”

read com

case $com in

1)

echo “1.Nginx安装”

echo “2.Mysqld安装”

echo “3.PHP安装”

 

read a

        if [ $a -eq 1 ]

                then

                bash nginx.sh

        else

        if [ $a -eq 2 ]

                then

                bash mysql.sh

        else

        if [ $a -eq 3 ]

        then

        echo “您正在安装PHP服务,请稍后。。。”

        fi

               fi

               fi

;;

2)

echo “一.创设用户”

echo “二.删减用户”

read b

        if [ $b -eq 1 ]

                then

                bash useradd.sh

                else

        if [ $b -eq 2 ]

                then

                bash userdel.sh

        fi

        fi

;;

3)

echo “1.配置ip地址”

echo “2.重启互连网服务”

read c

        if [ $c -eq 1 ]

        then

        bash ip.sh

  else

        if [ $c -eq 2 ]

        then

        bash fuwu.sh

        fi

        fi

;;

*)

echo “请输入要实行的美食指南命令(3/6/三):”

;;

esac

实行效劳:

home88一必发 34

条件测试:

运算符:

平头比较运算符                                       描述

num壹 –eq       num贰                  假若num1等于 num二,测试结果为0

num一 –ge num2                   要是num1大于或等于 num二,测试结果为0

num一 –gt num2                    倘诺num1大于 num2,测试结果为0

num一 –le num2                  假如num1小于或等于 num二,测试结果为0

num1 –lt  num2                  假诺num一小于 num二,测试结果为0

num一 –ne num二                   如若num1不对等 num贰,测试结果为0

判别文件 -f

home88一必发 35

看清一般文书–e

home88一必发 36

认清目录–d

home88一必发 37

推断文件是不是有施行权-x

home88一必发 38

看清是不是为空–z

home88一必发 39

推断是还是不是不为空-n

home88一必发 40

-r测试是还是不是有读的权位

加减乘除运算:

选择shell脚本开采总结器,用read读入情势,并对变量个数实行剖断

#! /bin/bash

read -t 5 -p “Pls input two number :” a b

expr $a + 0 &>/dev/null

expr $b + 0 &>/dev/null

        if [ $? -eq 0 ]

                then

 

                        echo “a-b=$((a-b))”

                        echo “a+b=$((a+b))”

                        echo “a*b=$((a*b))”

                        echo “a/b=$((a/b))”

 

                else

                        exit

        fi

选取shell脚本开荒计算器,用传参格局,并对变量个数实行判别

#! /bin/bash

a=$1

b=$2

function YUN(){

         echo “a+b=$((a+b))”

         echo “a-b=$((a-b))”

         echo “a*b=$((a*b))”

         echo “a/b=$((a/b))”

}

        if [ $# -eq 2 ]

                then

                        YUN

                else

                        echo “Pls input two number”

                exit

        fi     

 

case $1 in

 *)

   exit

;;

esac

实行效果:

home88一必发 41

Bc命令总括:

home88一必发 42

Expr命令总括

home88一必发 43

小括号算法:

home88一必发 44

home88一必发 45

概念函数以及调用函数

#! /bin/bash

#概念变量

function Number(){

seq -w 10

}

function Zimu(){

echo {a..z}

}

#调用变量

 Number

 Zimu

实行结果:

home88一必发 46

调用系统变量/etc/init.d/functions

#! /bin/bash

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

action “nginx is running”  /bin/true

action “nginx is stoped”   /bin/false

奉行结果:

home88一必发 47

用shell脚本开采nginx服务运营脚本

#! /bin/bash

NGINX=”/usr/local/nginx/sbin/nginx”

nginxSTOP=”killall -s QUIT nginx”

. /etc/init.d/functions

nginxNumber=`netstat -anpt |grep nginx|wc -l`

 

case $1 in

  start)

        $NGINX

        [ $? -eq 0 ]&&action “nginx is running” /bin/true || action
“nginx is running” /bin/false

;;

  stop)

        $nginxSTOP

        [ $? -eq 0 ]&&action “nginx is stoped” /bin/true || action
“nginx is stoped”  /bin/false

;;

  restart)

        $0 stop

               Sleep 2

        $0 start

;;

  *)

echo ” Usage {stop | start |restart }”

esac

实行效果:

home88一必发 48

办法2:Nginx服务运维脚本

#! /bin/bash

# chkconfig:- 85 15

# description:hehe

PROG=”/usr/local/nginx/sbin/nginx”

PID=”/usr/local/nginx/logs/nginx.pid”

 

case “$1” in

 start)

$PROG

if [ $? -eq 0 ]

  then

        echo  “正在起步nginx服务” 

fi

;;

 stop)

killall -s QUIT nginx

if [ $? -eq 0 ]

 

then

        echo  “正在关闭nginx服务”

fi

;;

status)

DUAN=$(netstat -anpt |grep nginx |awk -F ‘ ‘ ‘{print $4}’ |awk -F  ‘:’
‘{print $2}’)

if [ -z $DUAN  ]

then

        echo “服务没有运行”

else

 

if [ $DUAN=80 ]

then

        echo “服务已经起步”

else

        echo “服务未有运维”

fi

fi

;;

 

restart)

$0 stop

$0 start

 

echo “正在重启nginx服务”

;;

 *)

echo “Usage: $0 (start|stop|restart )”

exit 1

esac

exit 0

试行结果:

home88一必发 49

用shell脚本判定1.0网段有微微ip在线

#! /bin/bash

. /etc/init.d/functions

for i in `seq 1 254`

do

ping -c 3 -w 3 192.168.1.$i >>/dev/null &&action “host
192.168.1.$i” /bin/true ||action “host 192.168.1.$i” /bin/false

done

施行结果:

home88一必发 50

此脚本能够变动系统字体颜色,脚本有点小瑕疵

#!/bin/bash

#把所以颜色定义变量

Black=`echo -e “\033[30m 黑色字 \033[0m”`

Red=`echo -e “\033[31m 红色字 \033[0m”`

Green=`echo -e “\033[32m 绿色字 \033[0m”`

Yellow=`echo -e “\033[33m 黄色字 \033[0m”`

Blue=`echo -e “\033[34m 蓝色字 \033[0m”`

Purple=`echo -e “\033[35m 紫色字 \033[0m”`

Blue_words=`echo -e “\033[36m 天蓝字 \033[0m”`

White=`echo -e “\033[37m 白色字 \033[0m”`

read -p ” What color do you like? :” com

#用case语句相配

case $com in

  red )

         $Red

;;

  black)

        $Black

;;

  green)

        $Green

;;

  blue)

        $Blue

;;

  yellow)

        $Yellow

;;

  white)

        $White

;;

  purple)

        $Purple

;;

  blue_words)

        $Blue_words

;;

  *)

     echo “Usage: Pls input {red | black | green | yellow | white |
purple | blue_words | blue |} “

;;

Esac

实践职能:

home88一必发 51

注:以上脚本调用变量的时候加echo就ok

用curl命令远程探测服务端口,假若服务宕机同等看待启

#! /bin/bash

. /etc/init.d/functions

Check_curl=`curl -I -s -1|cut -d ”
” -f2`

Check_curl1=`curl -I -s -1|cut -d
” ” -f3`

 

if [ “$Check_curl” == “200” ]

        then

                  action “nginx is running” /bin/true

        else

if [ “$Check_curl1” == “OK” ]

        then

                action “nginx is running” /bin/true

        else

                action “nginx is stoped” /bin/false

                service nginx start >>/dev/null

fi

fi

实行结果:

home88一必发 52

用nmap远程探测工具,模拟用户探测服务是还是不是宕机

#! /bin/bash

. /etc/init.d/functions

nmapPort=`nmap 192.168.1.103  -p 80|grep -w “open”|cut -d ” ” -f2`

nmapService=`nmap 192.168.1.103 -p 80|grep -w “open”|cut -d ” ” -f4`

if [ $nmapPort == “open” ]

        then

                action “httpd is running” /bin/true

        else

if [ $nmapService == “httpd” ]

        then

                action “httpd is running” /bin/true

        else

                  action “httpd is stoped” /bin/false

fi

fi

措施2,用剧本传参的法子完成上述意义:

#! /bin/bash

[ -f /etc/init.d/functions ] && . /etc/init.d/functions ||exit 1

if [ $# -ne 2 ]

        then

echo “Usage:Pls input {IP and port}”

 

exit

fi

 

 

Nmap=`nmap $1 -p $2 |grep open|wc -l`

if [ “$Nmap” == 1 ]

        then

action “$1 $2 is running” /bin/true

        else

action “$1 $2 is closed” /bin/false

 

fi

数组:

home88一必发 53

注:以上是概念数组和查阅数组的长短和数组的内容

删去数组:

home88一必发 54

将数组中的四改为十

home88一必发 55

用for打字与印刷数组中的数到10就退出:

#!/bin/bash

array=( 1 2 3 10 11)

for i in `echo ${array[*]}`

do

if [ $i -eq 10 ]

        then

                break

fi

echo $i

done

home88一必发 56

打字与印刷出数组内容和数CEO度:

#! /bin/bash

array=(1 2 3)

for(( i=0; i<${#array[@]}; i++))

do

echo “This is number $i,then content is ${array[$i]}”

done

echo “———————-“

echo “this is length is  ${#array[*]}”

echo “数组内容为 ${array[*]}”

进行遵从:

home88一必发 57

用for循环批量该公文名:

#! /bin/bash

for filename in `ls *.jpg`

do

mv $filename `echo $filename|cut -d “.” -f1`.gif

done

方法二:

#! /bin/bash

for i in `ls *.txt`

do

mv $i `echo $i |cut -d “.” -f1`.doc

done

1.翻看系统时域信号,并对非确定性信号进行拍卖

home88一必发 58

home88一必发 59

注:常用复信号管理,需回想

home88一必发 60

做完时域信号管理,大家再运维守护进度,验证作用:

home88一必发 61

近期就可以看来在三个打点进程中,不可能用ctrl+c来终止

Shell跳板机:

#! /bin/bash

function trapper(){

trap “” `seq 1 64`

}

while :

do

trapper 

        clear

        cat <<menu

        1)web 1

        2)web 2

        3)exit

menu

read -p “Pls select :” num

case “$num” in

1)

echo 1

ssh 192.168.1.1

;;

2)

echo 2

ssh 192.168.1.2

;;

3|*)

exit

esac

done

 

[ $UID -ne 0 ]&& .
/scripts/service/tiaoban.sh———在/etc/profile.d/创立文件,写入—[
$UID -ne 0 ]&& . /scripts/service/tiaoban.sh

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图