shell 流程控制 02

shell 流程控制

#————注意: 
	-gt  大于
	-ge  大于等于
	-lt  小于  是less than  
	-le  小于等于  是less than or equal to
	对比数字使用既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=。其中-eq的意思是equal,-ne是unequal,-gt是greater than,-ge是greater than or equal to,

10、流程控制

10.1 条件表达式 if
	# ————if  fi
		#!/bin/bash
		# 注意:if 的后边一定要有 空格
		# 注意:[  ]  符号的左右要有 空格
		if [ $(ps -ef | grep -c "ssh") -gt 1 ]
		# -gt  是判断是否大于的意思 >
		then
		  echo "true"
		fi
	 
	# ————if elif else fi
		#!/bin/bash
		a=10
		b=20
		# 注:== 符号左右要有空格
		if [ $a == $b ]
		 then 
		  echo "a 等于 b"
		elif [ $a -gt $b ] # -gt 大于
		 then
		  echo "a 大于 b"
		elif [ $a -lt $b ] # -lt 小于
		 then
		  echo "a 小于 b"
		else # 里边没有then
		  echo "nothing"
		fi # if语句的结束标志
	 
	# ————if判断两个表达式是否相等 -eq
		#!/bin/bash
		num1=$[2*3]
		num2=$[1+5]
		echo num1 = ${num1}
		echo num2 = ${num2}
		# if 判断两个表达式是否相等  -eq
		if test ${num1} -eq ${num2}
		 then
		  echo "两个表达式相等"
		else
		  echo "不相等"
		fi
10.2 for 知道固定次数使用
	# ————FOR 循环
	#!/bin/bash
	# 注:每行一条语句,如果多条需要分号 ; 分割 
	for loop in 1 2 3 4 5
	do
	 echo $loop # 循环输出每个值
	done
10.3 while:知道退出条件使用
	#————while 满足条件循环
		#!/bin/bash
		a=1
		while [ $a -lt 20 ]
		 do
		  echo $a
		  # ` ` 命令引入 需要包含等号右侧加法
		  a=`expr $a + 1`
		 done
	#————until 不满足条件循环
		#!/bin/bash
		b=1
		# until 不满足条件执行
		until [ $b -ge 20 ]   # -ge 大于等于
		 do
		  echo $b
		  # ` ` 命令引入 需要包含等号右侧加法
		  b=`expr $b + 1`
		 done
10.4 分支语句 case
	#————case --> esac
		#!/bin/bash
		echo "输入1-4之间的额数字:"
		ehco "输入的数字为:"
		# 分支语句 case
		# read 从控制台读取输入的内容
		read aNum
		case $aNum in 
		 # 每个case都需要两个分号结束
		 1) echo "你输入了 1" ;;
		 2) echo "你输入了 2" ;;
		 3) echo "你输入了 3" ;;
		 4) echo "你输入了 4" ;;
		 5) echo "你输入了 5" ;;
		 *) echo " *) 表示 default 你输入的不是有效数字" ;;
		esac #case 反过来写作为结束标识
	#———— break 
		#!/bin/bash
		while :
		 do
		  echo -n "输入1-5之间的数字:"
		  read aNume  # 读取控制台输入,赋值给变量
		  case $aNume in
		    1|2|3|4|5) echo "你输入的数字是:" $aNume;;
		    *) echo "输入的数字无效"
		       break ;;
		  esac
		 done
	#———— continue 
		#!/bin/bash
		# 无限循环语法格式 while 后边有  冒号 :
		while :
		 do
		  echo -n "输入1-5数字:"
		  read aNum
		  case $aNum in
		   [1-5]) echo  aNum  =  $aNum ;;
		   "x") echo 'x quit'
		     break;;
		   *) echo "your input out of 1-5!!!!!"
		     continue ;;
		  esac
		done
#————练习
	# ——1、判断本地文件扩展名,将 .sh 的扩展名都去掉
		#!/bin/bash
		for file in `ls ./`
		 do
		  #prefix=${file:`expr ${#file} - 3`}
		  l=`expr ${#file} - 3` # 得到文件的长度,不包含扩展名
		  k=${file:l:l+3}   # 得到扩展名部分  .扩展名
		  #echo $k          # 打印所有扩展名
		  if [ $k == '.sh' ] # 判断扩展名是否 是  .sh
		   then
		    newName=${file:0:l}  # 得到去掉扩展名后的名称
		    mv ${file} ${newName} # 修改文件名 为新的没有扩展名的名称
		    #echo $newName
		  fi  # 结束 if
		 done # 结束 for

	# ——2、判断输入的 名称 是一个 文件 还是一个 文件夹
		#!/bin/bash
		if [ -f $1 ]		# 判断参数值 文件 类型
		  then
		   echo file =  $1
		  elif [ -d $1 ]	 # 判断参数是 文件夹 类型
		   then
		    echo dir =  $1
		  else
		    echo ' $1 nothing ' = $1
		fi
	# ——3、修改本地所有文件的名称,文件夹之外的文件,添加.sh
		#!/bin/bash
		# 1.获取到所有文件
		# 2.判断是文件or文件夹
		# 3.判断每个文件是否有 .sh扩展名
		# 4.没有.sh的 file 进行添加
		for name in `ls ./`
		 do
		  if [ -f $name ]
		   then
		    fileLen=${#name}
		    kzName=${name:fileLen-3:fileLen}
		    #echo $kzName
		    if [ $kzName == '.sh' ]
		     then
		      echo 当前的文件名称是:$name
		    else
		      mv ${name} ${name}.sh
		    fi
		  fi
		 done

11、函数

11.1 #———— 自定义函数
	#!/bin/bash
	# 自定义函数 function 可有可无
	function demoFun(){ # 函数定义
	 echo "this is fun"  # 函数语句
	}
	echo "start function"
	demoFun	   # 函数调用
	echo "end function"
11.2 #———— 函数参数传递 函数名前的 function 可有可无
	#!/bin/bash
	# 自定义函数  参数传递
	demoFun(){
	 echo "argument 1......" $1
	 echo "argument 2......" $2
	 echo "argument all......" $@
	}
	echo "start function"
	# 参数之间  空格 分割
	demoFun ^-^ -_-    # 参数传递
	echo "end function"

12、输出重定向

需要注意的是文件描述符 
	0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)

将 ls -al 显示的详细内容 重定向输入到 tt文件中
	ls 可有替换成任何命令,结果都可以通过 >  重定向到指定的文件 文件名自定义可以不存在
	> 覆盖重定向
[root@hadoop-1 testShell]# ls -al > tt
>> 追加重定向
[root@hadoop-1 testShell]# date >> tt
重定向 符号 前边加上错误级别 2>> 2> 可以将错误的提示信息 出入到文件
[root@hadoop-1 testShell]# cattt tt 2>> tt
[root@hadoop-1 testShell]# cattt tt 2> tt
正确和错误都希望重定向 2>&1 2>>&1
	正确 追加
[root@hadoop-1 testShell]# ls >> zz 2>&1
	错误 追加
[root@hadoop-1 testShell]# lssss >> zz 2>&1
    正确 覆盖
[root@hadoop-1 testShell]# ls > zz 2>&1
    错误 覆盖
[root@hadoop-1 testShell]# ls > zz 2>&1

补充:

举例:httpd服务的应用: (PHP有关)
[root@hadoop-1 ~]# service httpd start
	访问:http://192.168.137.101/
	可以看到 : Apache 2 Test Page - powered by CentOS


#———— let 计算
	a=2
	echo "a init is $a"
	let "a+=1"
	echo "a+=1 is $a"

	运行结果:

	a init is 2
	a+=1 is 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百世修行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值