1.shell脚本的创建执行 
1 2 #!/bin/bash echo  "www.google.com" 
 
执行 :/opt/shell/wordcount.sh
给该脚本的用户以及用户组加上执行权限 
chmod 654 xxx.sh 
shell 命令的debug
在#!/bin/bash 后面加上-x的参数可以在控制台中打印出执行的命令以及执行命令的结果 
sh -x wordcount.sh  可以使用这个命令来进行调试
生产上面开发shell脚本 
1.开头需要定义#!/bin/bash 
2.调试脚本 #!/bin/bash -x
注意:使用sh执行脚本的时候 sh xxx.sh   不论在脚本的第一行是否加上#!/bin/bash 都可以执行该脚本
2.定义变量及引用 
vim variable.sh 
1 2 3 4 5 6 7 #!/bin/bash aa="www.google.com"  date=`date` echo  $aa echo  $date 
 
静态变量:值不会变化 k=“v” -->字符串   k=v -->数值 
动态变量:值会发生改变 k=`v` 
等号前后不能有空格 
变量的引用:$a  ${aa} :变量的引用需要加上美元符号
生产上面建议引用变量的时候加上大括号{}
3.传递参数 
向shell脚本中传递参数 
$1 
$2 
vim param.sh 
1 2 3 4 5 6 7 #!/bin/bash echo  $1 echo  $2 echo  "参数个数:$# " echo  "传递参数作为一个字符串显示:$*" echo  "PID:$$" 
 
参数释义 :
1 2 3 4 5 $1 :传递进来的第一个参数 $2 :传递进来的第二个参数 $# :传递进来的参数的个数 $* :传递进来的全部参数作为一个参数 $$ :显示PID 
 
4.数组 
一维数组
vim array.sh 
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash arr=(math chinese english) echo  ${arr}       echo  ${arr[*]}    echo  ${arr[0]}    echo  ${#arr[*]}   echo  ${arr[@]}    echo  ${#arr[@]}   
 
参数释义 :
1 2 3 4 5 ${arr}	  :数组中的第一个元素 ${arr[*]} :取数组中的所有元素 ${arr[0]} :取数组中的第一个元素 ${#arr[*]}:取数组中元素的个数 上面的* 也可用@ 来表示 
 
5.if 判断 
vi if.sh 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/bin/bash a="abc"  b="jepson"  if   [  $a  == $b  ];then   if 里面的中括号前后要打上空格	echo  "=="  	 else  	echo  "!="  fi  if  [  $a  == $b  ];then  表示的是写到同一行中if [ "$a "  == "$b "  ];then  	echo  "=="  elif [ "$a "  == "ccc"  ];then 	echo  "ccc"  else 	echo  "!="  fi 
 
6.循环 
for循环	while循环
vim for.sh 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash echo  "=========for循环==============" for  x in  1 2 3 4 5do 	echo  $x  done echo  "==========for循环=============" for  ((int i=1;i<10;i++))do  	echo  $i  done echo  "===========while循环============" j=1 while (($j <10))do 	echo  ${j}  	let  "j++"  done 
 
7.分割字符串 
vi split.sh  
1 2 3 4 5 6 7 8 9 10 11 12 #!bin/bash s="math,english,chinese,scala,spark,hdfs,hadoop"  OLD_IFS= "$IFS "  IFS=","  arr=($s ) IFS="$OLD_IFS "  for  x in  ${arr[*]} do 	echo  $x  done 
 
第二种: 
vim splits.sh  
1 2 3 4 5 6 7 #!/bin/bash s="math,english,chinese,scala,spark,hdfs,hadoop"  arr2=(${s//,/ } ) for  x in  ${arr2[*]} do 	echo  $x  done 
 
8.案例:监控脚本 
vi ganglia.sh  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/bin/bash for  ip in  $(cat /opt/monitor/sh/ping/ip_list|sed "/^#d" )do 	ping -c 1 $ip  &>/dev/null  	a=$? 	sleep 2 	ping -c 1 $ip  &>/dev/null 	a=$? 	sleep 2 	ping -c 1 $ip  &>/dev/null 	a=$? 	sleep 2 	DATE=$(date +%F" " %H:%M) 	if [ $a  -ne 0 -a $b  -ne 0 -a $c  -ne 0 ];then  	 	python /opt/monitor/sh/weixin_alert.py "Critical: ${ip}  can't ping"  	else  		echo  "$ip  ping is successful."  	fi  done 
 
ssh 
1 2 3 4 for  ip in  $(cat /opt/monitor/sh/ping/ip_list|sed "/^#d" )do 	ssh -o ConnectTimeout=5 $ip  date &>/dev/null  done 
 
9.判断数组是否为空 
1 2 3 4 5 6 7 #!/bin/bash para1=() if  [ ! -n "$para1 "  ];then   echo  "param is null"  else    echo  "param is not null"  fi 
 
10.判断数组是否包含字符串-数字 
方法一 :推荐
1 2 3 4 5 6 7 8 9 10 #!/bin/bash array=(hadoop,hive,spark,kafka,hbase,flink) var=hadoops if  [ ${array[@]/${var} /} != ${array[@]}  ];then         echo  "hadoop is in array"  else         echo  "hadoop is not in array"  fi 
 
11.判断文件夹-文件-变量是否存在参数 
1 2 3 4 -d:判断文件夹是否存在 -f:判断文件是否存在 -x:判断是否存在并且是否具有可执行权限 -n:判断一个变量是否有值 
 
代码如下 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #!/bin/bash flod=/root/shell/fload file=/root/shell/fload/file.txt echo  "==========判断文件夹==========" if  [ -d ${flod}  ];then   echo  "${flod}  is in the path"  else   echo  "not in the path"  fi echo  "==========判断文件==========" if  [ -x ${file}  ];then   echo  "file is exisit"  else   echo  "file is not exisit"  fi echo  "==========判断变量=========="  if  [ ! -n ${param}  ];then   echo  "param is not null"  else   echo  "param is null"  fi 
 
12.判断文件是否为空 
参数释义 :
1 2 3 4 5 -e:文件存在 -s:文件长度不为0 -r:文件具有读权限 -w:文件具有写权限 -x:文件具有执行权限 
 
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/bash file=/root/shell/fload/sutdent.txt flod=/root/shell/fload echo  "==========判断文件是否存在==========" if  [ -e ${file}  ];then   echo  "file is exisit"  else   echo  "file is not exisit"  fi echo  "==========判断文件是否为空==========" if  [ ! -s ${file}  ];then   echo  "file is null"  else   echo  "file is xxx kb"  fi echo  "==========判断文件是否具有执行权限==========" if  [ -x ${file}  ];then   echo  "file have the execute permission"  else    echo  "file not have the execute permission"  fi 
 
持续更新