linux shell表白代码,linux shell 编程(示例代码)

二.linux shell 之read -p 用法

shell下的read命令的作用是从标准流中读取输入,并把读取的内容放到某个变量中。

#!/bin/bash

echo -e "Please enter your test :"

read TESTREAD

echo $TESTREAD

##########################################

实例2

#!/bin/bash

mum=$1

mum=${mum:-3} #变量替换##当$mum的值大于或等于3后,就执行else后面的.

if [ $mum = "1" ];then

echo "测试环境 ..."

elif [ $mum = "2" ];then

echo "生产环境"

else

echo "请输入1或2,或单击enter键…"

fi

echo -e "\033[35m --------- 你输入的是数字$mum!!!$in \033[39;49;0m"

echo " press any key to continue " # 提示按任意键继续...

read key

三、SHELL学习笔记之循环语句之for和while

循环语句:for  while

1.)for循环语句是在知道循环次数时使用.

2.)while循环语句是在不知道循环次数时使用,使变量增加1的操作可以写成"let,i++"或expr变量1运算符变量

for循环结构:

for 变量名 in 取值列表

do

命令序列

done

while循环结构:

while 条件测试命令

do

命令序列

done

for 循环实例:

jia.gif

jian.gif

[[email protected] source]# more for.sh

#!/bin/bashfor((i=1;i<10;i++))doecho $i

done

或着(两种方式执行的结果是一样的)。

#!/bin/bashfor i in `seq 10`doecho $i

done

执行结果:

[[email protected] source]# shfor.sh1

2

3

4

5

6

7

8

9例2:for循环之创建用户脚本:

#!/bin/bashfor i in {1...10}douseradd studet$i

echo password| passwd --stdin studet$i

done

for 循环实例

while循环实例:

jia.gif

jian.gif

while循环实例:

#!/bin/sh

echo"Please input the num:"read num

sum=0i=1signal=0

while [[ $signal != 1]]do

if [ $i -eq $num ]

then

let"signal=1"let"sum+=i"echo"1+2、、、+$num=$sum"

elselet"sum=sum+i"let"i++"fi

done

实例2:while循环...

#!/bin/bash

checkdays=7

while [ $checkdays -ge 4]dorq=`date +%Y-%m-%d --date="$checkdays days ago"`

[-f /usr/local/tomcat7/logs/localhost.$rq.log ] &&{

tar zcf localhost.$rq.log.tar.gz localhost.$rq.log

}

let checkdays-=1####属于递减的循环...

done

执行后结果如下:

[[email protected]~]# sh -x 000.sh+ checkdays=7

+ ‘[‘ 7 -ge 4 ‘]‘

++ date +%Y-%m-%d ‘--date=7 days ago‘

+ rq=2014-07-24

+ ‘[‘ -f /usr/local/tomcat7/logs/localhost.2014-07-24.log ‘]‘

+ let checkdays-=1

+ ‘[‘ 6 -ge 4 ‘]‘

++ date +%Y-%m-%d ‘--date=6 days ago‘

+ rq=2014-07-25

+ ‘[‘ -f /usr/local/tomcat7/logs/localhost.2014-07-25.log ‘]‘

+ let checkdays-=1

+ ‘[‘ 5 -ge 4 ‘]‘

++ date +%Y-%m-%d ‘--date=5 days ago‘

+ rq=2014-07-26

+ ‘[‘ -f /usr/local/tomcat7/logs/localhost.2014-07-26.log ‘]‘

+ let checkdays-=1

+ ‘[‘ 4 -ge 4 ‘]‘

++ date +%Y-%m-%d ‘--date=4 days ago‘

+ rq=2014-07-27

+ ‘[‘ -f /usr/local/tomcat7/logs/localhost.2014-07-27.log ‘]‘

+ let checkdays-=1

+ ‘[‘ 3 -ge 4 ‘]‘

while循环实例

四、SHELL学习笔记之条件判断语句 if

条件判断语句:if

if 条件测试命令

then

命令序列1

else

命令序列2

fi

实例:

#!/bin/bash

#install nginx-1.10.2

if [ ! -d /usr/local/src ];then

echo "not dircetry!!"

else

echo "is this dirctroy"

fi

2.多重条件判断语句:if/else

if [ 条件测试命令 ];

then

命令序列1

elif [ 条件测试命令 ];

then 命令序列2

elif [ 条件测试命令 ];

then 命令序列3

else

命令序列4

fi

实例:

jia.gif

jian.gif

#!/bin/bash

system=`uname -s`if [ $system="linux"];then

echo"linux"elif [ $system="windows"];then

echo"windows"elif [ $system="solaris"];then

echo"solaris"

elseecho"what??"fi

语句判断系统是那种类型的操作系统

1.整数判断

-eq 等于,如:if [ "$a" -eq "$b" ]

-ne 不等于,如:if [ "$a" -ne "$b" ]

-gt 大于,如:if [ "$a" -gt "$b" ]

-ge 大于等于,如:if [ "$a" -ge "$b" ]

-lt 小于,如:if [ "$a" -lt "$b" ]

-le 小于等于,如:if [ "$a" -le "$b" ]

大于(需要双括号),如:(("$a" > "$b"))

>= 大于等于(需要双括号),如:(("$a" >= "$b"))

小数据比较可使用AWK

2. 文件的判断

-r file     用户可读为真

-w file     用户可写为真

-x file     用户可执行为真

-f file     文件为正规文件为真

-d file     文件为目录为真

-c file     文件为字符特殊文件为真

-b file     文件为块特殊文件为真

-s file     文件大小非0时为真

-t file     当文件描述符(默认为1)指定的设备为终端时为真

[ -f "somefile" ] :判断是否是一个文件

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

[ -n "$var" ] :判断$var变量是否有值

[ "$a" = "$b" ] :判断$a和$b是否相等

3.复杂逻辑判断

-a         与

-o        或

!        非

4.字符串判断

str1 = str2      当两个串有相同内容、长度时为真

str1 != str2      当串str1和str2不等时为真

-n str1        当串的长度大于0时为真(串非空)

-z str1        当串的长度为0时为真(空串)

str1         当串str1为非空时为真

五、SHELL学习笔记之多分支语句-case

多分支语句:case  多分支if语句通常可以修改为case语句.

case $变量名 in

模式1)

命令序列1

;;

模式2)

命令序列2

;;

*)

默认执行的命令序列 ;;

esac

2. case语句结构特点如下:

case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。

双分号“;;”表示命令序列结束。

匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。

最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后 的命令序列。

3.case语句实例:

1.)由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符,并输出相应的提示信息。

#!/bin/bash

read -p "press some key ,then press return :" KEY

case $KEY in

[a-z]|[A-Z])

echo "It‘s a letter."

;;

[0-9])

echo "It‘s a digit."

;;

*)

echo "It‘s function keys、Spacebar or other ksys."

esac

2.)许多的daemon都会附上一个管理用的Shell Script,Apache就附上apachectl。这些管理程式都是用shell script来写的,以下示一个管理inetd的shell script。

#!/bin/sh

case $1 in

start | begin | commence)

/usr/sbin/inetd

;;

stop | end | destroy)

killall inetd

;;

restart | again)

killall -HUP inetd

;;

*)

echo "usage: inetpanel [start | begin | commence | stop | end | destory | restart | again]"

;;

esac

例如利用case来写一个解压war包的脚本.

#more initjar.sh

#!/bin/bash

#############################

#############################

DDIR=~/sources

PROJECT=$1

PWD=`pwd`

DCONF=~/$PROJECT/WEB-INF/classes

case $1 in

fore)

test ! -d ~/$PROJECT && mkdir ~/$PROJECT

cd ~/$PROJECT && rm -rf ./*

jar -xf $DDIR/$PROJECT.war

cat $DCONF/server.properties.online >$DCONF/server.properties

cat $DCONF/database.properties.online >$DCONF/database.properties

cat $DCONF/merchantInfo.properties.online >$DCONF/merchantInfo.properties

cat $DCONF/../web.xml.online >$DCONF/../web.xml

;;

eten)

test ! -d ~/$PROJECT && mkdir ~/$PROJECT

cd ~/$PROJECT && rm -rf ./*

jar -xf $DDIR/$PROJECT.war

cat $DCONF/server.properties.online >$DCONF/server.properties

cat $DCONF/database.properties.online >$DCONF/database.properties

#cat $DCONF/merchantInfo.properties.online >$DCONF/merchantInfo.properties

;;

pp-bms)

test ! -d ~/$PROJECT && mkdir ~/$PROJECT

cd ~/$PROJECT && rm -rf ./*

jar -xf $DDIR/$PROJECT.war

cat $DCONF/server.properties.online >$DCONF/server.properties

cat $DCONF/database.properties.online >$DCONF/database.properties

#cat $DCONF/merchantInfo.properties.online >$DCONF/merchantInfo.properties

;;

*)

echo $"Usage: $0 {fore|eten|pp-bms|passport|pp-web2|toloan|report|app}"

RETVAL=2

;;

esac

exit $RETVAL

利用case写的一个备份脚本.

#more backup.sh

#!/bin/bash

##############################

# discrition: backup project of tomcat by Manual

# example: ~/bin/backup.sh fore

# write by frank at 2014/03/11

##############################

BAK_DIR=/apps/product/backup

ETEN_DIR=/apps/product/tomcat_eten/webapps/eten

FORE_DIR=/apps/product/nginx/htdocs/p2ptomcat/fore

BMS=/apps/product/tomcat_eten/webapps/pp-bms

DAY_DIR=`date +%Y%m%d`

TIME=`date +%Y%m%d%H%M`

mkdir -p ${BAK_DIR}/${DAY_DIR}

case $1 in

eten)

cd $BAK_DIR

cp -a $ETEN_DIR $BAK_DIR

tar -czf $1.$TIME.tgz $1 && rm -rf $1

mv $1.$TIME.tgz $DAY_DIR/

exit 0

;;

fore)

cd $BAK_DIR

cp -a $FORE_DIR $BAK_DIR

tar -czf $1.$TIME.tgz $1 && rm -rf $1

mv $1.$TIME.tgz $DAY_DIR/

exit 0

;;

pp-bms)

cd $BAK_DIR

cp -a $BMS $BAK_DIR

tar -czf $1.$TIME.tgz $1 && rm -rf $1

mv $1.$TIME.tgz $DAY_DIR/

exit 0

;;

*)

echo "$0 {eten|fore|pp-bms}"

exit 2

;;

esac

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值