if 单分支、双分支、多分支、嵌套if语句

for 列表表示

    1、给出列表

    2、{1..100}

    3、命令引用:

        1)$(ls DIR)

        2)$(1 1 100)

    4、glob

    5、$*,$@

condition  

declare -i -r -x

readonly

export ,env

set,printenv,env,export,readonly -p

bash:过程式编程,为了完成更复杂的任务,支持顺序执行、选择执行、循环执行

  顺序执行:从左而右,依次执行命令。

  选择执行:依据condition(条件)的执行状态结果,选择执行不同的代码片段。

  循环执行:依据condition(条件)的执行状态结果,决定是否进入循环。

  

condition:

   ture: 表示条件状态结果为0

   false: 表示条件执行状态结果非0

if

   单分支、双分支、多分支、嵌套if语句

1、单分支结构if condition; then    if-turefi2、双分支结构if condition; then    if-tureelse    if-falsefi3、多分支结构if condition; then    if-tureelif condition; then    if-tureelif condition; then    if-ture    ....else    all-falsefi4、嵌套if语句if condition; then    if condition; then        if-ture    fifiif condition; then    if condition; then        if-ture    fielse    if condition; then        if-ture    fi   fi

for

列表循环

格式

1、格式一for 变量名 in 列表; do    循环体done2、格式二for 变量名 in 列表do    循环休done3、格式三,命令行中for 变量名 in 列表; do 循环体; done

列表表示方法

    1、给出列表

    2、{首位..尾数} ,例如 1到100表示为" {1..100}"

    3、命令引用:

        1)$(ls DIR)

        2)$(expr [首数 [步长]] 尾数),例如 1到100表示为"$(1 1 100)"

    4、通配符, glob . 例如 /var目录下一级子目录中的所有文件和目录的绝对路径。/var/*

    5、变量引用。 $* 向脚本传递的所有参数,整体。$@向脚本传递的所有参数,每个独立

    

脚本格式

#!/bin/bash# Version: major.minor.release# Author:# Desc:

脚本语法检测

# bash -n file.sh

调试脚本

# bash -x file.sh

记录脚本退出状态码

INTEVAL=$? (变量引用实现赋值)

用户邮箱位置

/var/mail

定义变量的类型

整型: # declare -i var

定义变量

1、环境变量# env var# declare -x var# export var2、只读变量# declare -r var# readonly var

显示本地和环境变量

# set

显示环境变量

# export# env# printenv

显示只读变量

# readonly -p

示例一:交互式给出一个文件路径,判断文件的类型

#!/bin/bash# Version: 0.0.1# Author: Lcc.org# Description:testingread -t 5 -p 'Enter a file path: ' filenameif [ -z "$filename" ]; then	echo "Enter a file path"	exit 1fiif [ ! -e $filename ]; then	echo "No such file."	exit 2fiif [ -f $filename ]; then	echo "Common file."elif [ -h $filename ]; then	echo "Symbolic file."elif [ -d $filename ]; then	echo "Directory."else 	echo "Other type."fi

示例二:添加10个用户,user1 ,,....user10,密码同用户名(只有root能改密码)。

**只有root能修改密码**

1、列表,直接给出#!/bin/bash# Version: 0.0.2# Author: Lcc.org# Description: add user##避免执行命令的用户非root用户,非root用户是不能修改密码的。if [ $UID -ne 0 ]; then  echo "Only root."  exit 1fi##以给出列表的方式,循环。当列表循环完毕时,循环结束for i in user1 user2 user3 user4 user5 user6 user7 user8 user9 user10; do  ## 判断用户是否存在。  if id $i &> /dev/null; then    ## 执行状态结果为0时,条件为真时,说明什么呢?    echo "$i exist"  else        ## 用户不存在时,即可添加用户	if ! useradd $i 2> /dev/null; then	  ## 添加不成功时, 组合中,对命令或测试条件取反。	  echo "$i is outside the law"	else	  ## 用户名,正常,能正常添加用户,则可以给其添加密码          echo "$i" | passwd --stdin $i > /dev/null 2>&1          ## 数值测试添加密码的执行状态结果。	  if [ $? -ne 0 ]; then	    ## 结果不为0,表示执行不成功	    echo "password is not legal"	  fi    fi  fidone2、{1..10}#!/bin/bash# Version: 0.0.3# Author: Lcc.org# Description: {}表示列表[ ! $UID -eq 0 ] && echo "Only root."  && exit 1for i in {1..10}do  id user$i &> /dev/null  if [ $? -eq 0 ]; then    echo "user$i exist"  else    useradd user$i 2> /dev/null	[ $? -ne 0 ] && echo "UserName is not legal" && continue	echo "user${i}" | passwd --stdin user${i} &> /dev/null	[ $? -ne 0 ] && echo "Password is not legal"	echo "Add user user$i finished"  fidone3、命令引用#!/bin/bash# Version: 0.0.4# Author: Lcc.org# Description:  $(seq 10)表示列表[ ! $UID -eq 0 ] && echo "Only root."  && exit 1for i in $(seq 10)do  id user$i &> /dev/null  if [ $? -eq 0 ]; then    echo "user$i exist"  else    useradd user$i 2> /dev/null	[ $? -ne 0 ] && echo "UserName is not legal" && continue	echo "user${i}" | passwd --stdin user${i} &> /dev/null	[ $? -ne 0 ] && echo "Password is not legal"	echo "Add user user$i finished"  fidone4、特殊变量#!/bin/bash# Version: 0.0.5# Author: Lcc.org# Description: $*,$@表示列表[ ! $UID -eq 0 ] && echo "Only root."  && exit 1for i in $*do  id $i &> /dev/null  if [ $? -eq 0 ]; then    echo "$i exist"  else    useradd $i 2> /dev/null	[ $? -ne 0 ] && echo "UserName is not legal" && continue	echo "${i}" | passwd --stdin ${i} &> /dev/null	[ $? -ne 0 ] && echo "Password is not legal"	echo "Add user $i finished"  fidone

示例三:判断/var/目录下每个文件的类型

方法一#!/bin/bash# Version: 0.0.6# Author: Lcc.org# Description: file typefor i in /var/*; do  if [ -f $i ]; then  	echo "Common file."  elif [ -L $i ]; then  	echo "Symbolic file."  elif [ -d $i ]; then  	echo "Directory."  else    echo "Other type"  fidone方法二:#!/bin/bash# Version: 0.0.7# Author: Lcc.org# Description: Galaxy cd /varfor i in $(ls /var); do  if [ -f $i ]; then    echo "Common file."  elif [ -L $i ]; then    echo "Symbolic file."  elif [ -d $i ]; then    echo "Directory."  else    echo "Other type"  fidone方法三:#!/bin/bash# Version: 0.0.8# Author: Lcc.org# Description: Add DIRfor i in $(ls /var); do	if [ -f /var/$i ]; then		echo "Common file"	elif [ -L /var/$i ]; then		echo "Symbolic file"	elif [ -d /var/$i ]; then		echo "Directory"	else		echo "Other type"	fidone

示例四:tcp协议下处于ESTABLISH状态的有多少个,LiSTEN有多少个,有几种状态

方法一:#!/bin/bash# Version: 0.0.9# Author: Lcc.org# Description: statusTCPdeclare -i listen=0declare -i established=0declare -i other=0for i in $(netstat -tan | grep '^tcp\>' | tr -s ' ' | cut -d' ' -f6); do	if [ "$i" == "LISTEN" ]; then		let listen++	elif [ "$i" == "ESTABLISHED" ]; then		let established++	else		let other++	fidoneecho -e "LISTEN statu: $listen\nESTABLISHED statu: $established\nOther status: $other\nTotal type: $(netstat -tan | grep '^tcp\>' | tr -s ' ' | cut -d' ' -f6 | sort -u | wc -l)"方法二:# netstat -tan | grep '^tcp\>' | awk -v FS=' ' '{ARRAY[$NF]++}END{for(i in ARRAY){print i,ARRAY[i]}}'LISTEN 12CLOSE_WAIT 1ESTABLISHED 3