shell编程示例

1. 判断登陆用户是否是root

is_root.sh

#!/bin/bash
# 通过环境变量判断
test=$(env | grep 'USER' | cut -d "=" -f 2)

if [ "$test" == "root" ]
	then
	echo "Current user is root."
else
	echo "Not root."
fi

注意:给脚本赋予执行权限,如 chmod 755 is_root.sh
在这里插入图片描述

2. 判断Apache 是否开启,若未开启则开启

judge_apache.sh

#!/bin/bash
# 通过进程查看apache
test=$(ps aux | grep httpd | grep -v grep)

if [ -n "$test" ]
	then
		echo "Apache is running."
	else
		echo "Starting apache..."
		/etc/rc.d/init.d/httpd start &> /dev/null
		echo "done"
fi

在这里插入图片描述

3. 两位加、减、乘、除计算器

calculator.sh

#!/bin/bash

# 获取输入数
read -p "input n1: " n1
read -p "input ope: " ope
read -p "input n2: " n2

# 三个输入数都不为空
if [ -n "$n1" -a -n "$n2" -a -n "$ope" ]
	then
		# 判断两个数是否都是数字
		test1=$( echo $n1 | sed 's/[0-9]//g' )
		test2=$( echo $n2 | sed 's/[0-9]//g' )
		
		if [ -z "$test1" -a -z "$test2" ]
			then
				if [ "$ope" == '+' ]
					then
						result=$(( $n1 + $n2 ))
				elif [ "$ope" == '-' ]
					then
						result=$(( $n1 - $n2 ))
				elif [ "$ope" == '*' ]
					then
						result=$(( $n1 * $n2 ))
				elif [ "$ope" == '/' ]
					then
						if [ "$n2" != 0 ]
							then
								result=$(( $n1 / $n2 ))
						else
							echo "In / n2 can't be 0."
							exit 1
						fi
				else
					echo "Can't recognized ope=$ope"
					exit 2
				fi
		else
			echo "Ensure n1 and n2 are number."
			exit 3
		fi

else
	echo "Input is empty."
	exit 4
fi

echo "$n1 $ope $n2 = $result"

在这里插入图片描述

4. case 示例

choose.sh

#!/bin/bash

read -p "Input: " cho

case $cho in
	"yes")
		echo "Your choose is yes!"
		;;
	"no")
		echo "Your choose is no!"
		;;
	*)
		echo "Error!"
		;;
esac

在这里插入图片描述

完!

Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值