SHELL 条件,循环语句

$符后接括号类型:

${}:避免变量失效, $a 后如果要加字符,直接写的时候 $ 会辨识不到a ,此时要给a加个{ }, ${a}RMB 
$[]: 运算, $[1+1]
$(): 使用命令,a=date:命令直接赋给变量是不可以的,a=$[date],此时是可以赋值给a,用波浪号上的另一个小点符号也可以

if分支有三种:

	1,if单分支
	if 条件测试; then	   //如果条件测试成功,那就执行下面的所有指令(指令可以有很多)
		指令
	fi
	2,if双分支
	if 条件测试; then		   //如果条件测试成功,那就执行下面的指令
		指令
	else				//如果上述条件测试失败,那就执行下面的指令3、4
		指令
	fi
	3,if多分支,适合更复杂的情况,结果会有很多的情况
	if 条件测试; then			//首先判断,条件测试成功,就执行指令
		指令
	elif 条件测试; then    //上述测试失败,此处测试成功的话就执行指令
		指令
	else       //上述测试都失败的话就执行指令
		指令
	fi

举个栗子:

	ping命令应用在脚本中可以使用的选项:
	ping  -c  ping次数  -i ping间隔时间(单位:秒) -W 如果ping不通,多久反馈结果(单位:秒) ip地址:ping -c 3 -i 0.1 -W 1 127.0.0.1
		练习:编写脚本测试某ip是否能ping通,但不要显示过程,仅仅显示通了或者不通即可
					ping -c 3 -i 0.1 -W 1 192.168.4.7 &> /dev/null     //ping的具体过程扔黑洞不看
					    if [ $? -eq 0 ];then	 //仅仅使用$?可以判断上面的任务是否成功,如果等于0就是成功
					        echo "通了"
					    else
					        echo "不通"
					    fi

for循环 可以定义循环次数,有限的循环

	for 变量名 in 值1 值2 值3
	do
		指令     
	done

举个栗子:

seq命令可以帮我们创建数字序列, seq 10 : 输出 1 到 10
 #!/bin/bash
a=100
for i in $(seq $a)  #循环100次,支持变量,seq命令可以帮我们创建数字序列,对于for循环来说,就是可以当是多个值
do
   echo "nb"
   echo "$i"
done

while循环 可以根据条件测试决定循环次数,可以实现无限循环

		while 条件测试  #另外如果想故意创造一个无限循环可以在while后面写冒号即可
		do
			指令
		done

举个栗子:

RANDOM
练习:使用while编写猜数脚本
		#!/bin/bash
		x=$[RANDOM%100]    								//RANDOM是可以得到随机数的变量,除以100取余数可以得到零到99之间的随机数,并且存到变量x中
		y=0     															//这里还可以定义猜的次数,一次没猜时是0次
		while :     														//无限循环
		do
			let y++    													//每猜一次,把y+1
			read -p "请输入一个整数(0-99):" n        	//将用户给的数字存到变量n中
			if [ $n -eq$x ];then      								//使用if多分枝加条件测试判断n是否等于x
			        echo "恭喜!猜对了!猜了$y次"     //如果n等于x就喊出这句话
			        exit
			elif [ $n -gt $x ];then								//如果n比x大
			        echo "猜大了!"
			else															//还有最后一种情况
			        echo "猜小了!"
			fi
		done

case分支:功能类似if,不如if强大,语句比较精简

		case 调用变量名 in			//如果调用的变量内容与下面某个模式一致,就执行模式下面的指令
		模式1)				  				//这里的模式可以有很多
			执行指令 ;;					//指令需要用双分号结尾,如果一个模式有多个指令,那只需在该模式的最后一条指令后加双分号即可
		模式2)
			执行指令 ;;
		…
		*)										//如果上述模式都没有被匹配,那就匹配这个
			执行指令
		esac

举个栗子:

1. 测试case分支的实际应用
#!/bin/bash
case $1 in		//使用执行脚本后的第1个位置变量作为匹配对象
t|T|tt)				//如果$1是t或者T或者tt,都可以算匹配
    touch $2;;	 //此处是创建文件的命令,后面是第二个位置变量的参数
m|M|mm)
    mkdir $2;;
r)
    rm -rf $2;;
*)
    echo "请输入t|m|r"
esac

函数:

函数,可以将公共的语句块使用一个函数名来定义,方便后期反复调用,达到精简脚本,增加可读性的目的
	vi  test.sh
		#!/bin/bash
		a() {          //定义函数
		echo abc
		echo xyz
		}
		a    //调用函数,相当于执行上述两个echo任务
		a    //可以反复调用

	#bash  test.sh

NGINX相关:

	源码安装nginx
		将源码包导入到/root目录下,解压到/root目录下,编译,安装
	
	netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:
		-n以数字格式显示端口号
		-t显示TCP连接的端口
		-u显示UDP连接的端口
		-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
		-p显示监听端口的服务名称是什么(也就是程序名称)
		netstat –luntp | grep nginx  //查看nginx的详细信息
		
	在nginx中修改输出文字的颜色,可以使用下列方式:
		echo -e "\033[32mX\033[0m"     //-e选项可以激活后面特殊字符的作用,相当于使用echo的扩展功能,\033[32m代表设置颜色为绿色,X是输入内容,\033[0m代表还原颜色。
		栗子:
				vi test01.sh
					#!/bin/bash
					a() {                //定义函数
					echo -e "\033[$1m$2\033[0m"     //输出不同颜色的文本内容,并加入位置变量
					}
					a 31 ABCD    //调用时函数后面可以写位置变量的内容,31(红色)就是$1  ABCD是$2
				#bash test01.sh

举个大栗子:

编写脚本,使用case分支控制nginx服务
	#!/bin/bash
	case $1 in																//使用执行脚本后的第1个位置变量作为匹配对象
	s|start|kai)   																//如果$1是s或start或kai ,那么就执行以下指令
	    netstat -ntulp | grep -q nginx   							//查询有没有开启nginx服务, -q是不输出查询结果
	    [ $? -eq 0 ] && echo "nginx已经开启" && exit     //判断如果开了nginx就退出
	    /usr/local/nginx/sbin/nginx;;     							//如果没开nginx就开启
	stop|guan)    /															/如果$1是stop或guan,那么就执行以下指令
	    /usr/local/nginx/sbin/nginx -s stop;;     				//关闭nginx
	restart|cq)    															//如果$1是restart或cq,那么就执行以下指令
	    /usr/local/nginx/sbin/nginx -s stop   					//关闭nginx
	    /usr/local/nginx/sbin/nginx;;   								 //开启nginx,此处相当于重启nginx
	status|cx)     															//如果$1是status或cx,那么就执行以下指令
	    netstat -ntulp | grep -q nginx 								 //查询有没有开启nginx服务, -q是不输出查询结果
	    [ $? -eq 0 ] && echo "nginx正在运行中。。"  || echo "nginx未开启";;   //根据查询结果输出nginx正在运行或者nginx未开启的提示
	*)
	   echo "start|stop|restart"    									//如果没有匹配任何模式就是喊出使用该脚本的提示,告诉使用者$1应该敲啥,而不能随意敲。
	esac    																	//结尾,固定语法,不能少

循环的控制:

	通常,在执行循环任务中途如果想退出可以用exit指令,但该指令不但会退出循环,连同脚本也会一并退出,此时可以使用break与continue指令更精细的控制循环。
	exit    可以终止循环,但同时退出脚本,如果循环之后还有任务则无法执行
	break  终止循环,继续执行循环之后的任务
	continue  终止当前循环,继续执行下一次循环
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值