linux执行语句命令done,shell脚本编程的执行语句

顺序执行

从上到下逐条执行命令,执行完所有命令及退出。

选择执行

(1)&&,||

&&:代表and,&&左侧为真右侧则执行

||:代表or,||左侧为假右侧则执

(2)if语句

代码有一个分支;条件满足时才会执行;两个或以上的分支;只会执行其中一个满足条件的分支;

单分支的if语句

if 测试条件;then

代码分支

fi

双分支的if语句:

if 测试条件;then

条件为真时执行的分支

else

条件为假时执行的分支

fi

示例:通过参数传递一个用户名给脚本,此用户不存在,则添加之

#!/bin/bash

#

#

[ $# -eq 0 ] && echo "enter username" && exit 1

if id $1 &> /dev/null;then

echo "the is username exists"

exit 2

else

useradd $1 && echo "useradd finish"

fi

多分支的if语句

if condition1;then

条件1为真分支;

elif condition2;then

条件2为真分支

elif condition3;then

条件3为真分支

elif conditionN;then

条件n为真分支

else

所有条件均不满足时的分组

fi

注意:即便多个条件可能同时都能满足,分支只会执行其中一个,首先测试为“真”的那个;

示例:脚本参数传递一个文件路径给脚本,判断此文件的类型;

#!/bin/bash

#

#

if [ $# -lt 1 ];then

echo "enter one filepath"

exit 1

fi

if [ -L $1 ];then

echo "symbolic link"

elif

[ -d $1 ];then

echo "Directory"

elif

[ -b $1 ];then

echo "block device file"

elif

[ -c $1 ];then

echo "character special file"

elif

[ -f $1 ];then

echo "Common file"

elif

[ -p $1 ];then

echo "pipe"

elif

[ -S $1 ];then

echo "Socket file"

else

echo "Alien"

fi

注意:-L判断软连接需要写在判断首行,直接在命令行键入 file /var/* 就可以查看文件类型,file命令本身就是查看文件类型的

(3)case语句

case varname in

pattern1)

suite1

;;

pattern2)

suite2

;;

patternn)

suitenn

;

*)

other_suiten

;;

esac

;;双分号结尾,单分号表示结束,case是一直比较。可单独成行或者在最后一行命令最后

case中各pattern可以使用模式

a|b:a或b

*:匹配任意长度的任意字符

?:匹配任意单个字符

[-]:范围匹配

[a-z])

[0-9])

示例;让用户输入一个选项,根据其选项给出对应的信息

#!/bin/bash

#

#

cat <

cpu) display cpu information

mem) display memory iniformation

disk) dispaly disks iniformetion

quit) quit

================================

EOF

read  -p "enter your option:" option

while [ $option != "cpu" -a $option != "mem" -a $option != "disk" -a $option != "quit" ];do

echo "enter cpu mem disk quit"

read -p "enter your option again:" option

done

case $option in

cpu)

lscpu ;;

mem)

free -m ;;

disk)

fdisk -l /dev/[hs]d[a-z] ;;

*)

echo "quit"

exit 1 ;;

esac

循环执行

将一段代码重复执行0,1,多次;

进入条件:只有在条件满足时才进入循环

退出条件:每个循环都应该有退出条件,以有机会退出循环;

for循环

两种格式:

(1)遍历列表

(2)控制变量

for循环格式

==================================

for 变量名字 in list; do

循环体

done

==================================

遍历列表:

进入条件:只要列表有可用元素,即可进入循环;

退出条件;列表中的原素遍历完成

list的生成方式

(1)直接给出

#!/bin/bash

#

#

for username in user22 user23 user24 ;do

useradd $username

done

(2)整数列表

#!/bin/bash

#

#

for filename in 1 2 3 4 5;do

touch $filename

done

(a){start..end}

#!/bin/bash

#

#

declare -i sum=0

for i in {1..100};do

let sum=sum+i

done

echo "$sum"

(b)seq[start [incremtal]]last

#!/bin/bash

#

#

for filename in `seq 10`;do

touch $filename

done

(3)返回列表的命令

(4)glob

(5)变量引用

#!/bin/bash

#

#

#

username=`cut -d: -f1 /etc/passwd`

for userid in $username;do

id $userid

done

#!/bin/bash

#

#

declare -i sum=0

id=`cut -d: -f3 /etc/passwd`

for uid in $id;do

let sum=sum+uid

done

echo $sum

while循环

进入条件:condition测试为"真"

退出条件:condition测试为"假"

while循环格式

=========================================

while condition;do

循环体

循环控制变量修正表达式

done

=========================================

示例

#!/bin/bash

#

#

declare -i i=0

declare -i sum=0

while [ $i -le 100 ];do

let sum=sum+i

let i++

done

echo $sum

until循环

进入条件:condition测试为"假"

退出条件:condition测试为"真"

until循环格式

=============================================

until condition;do

循环体

循环控制变量修正表达式

done

=============================================

示例

#!/bin/bash

#

#

declare -i i=0

declare -i sum=0

until [ $i -gt 100 ];do

let sum=sum+i

let i++

done

echo $sum

break:提前跳出循环

while condition1;do

cmd1

if condition1;then

break

fi

cmdn

done

示例

#!/bin/bash

#

#

declare -i i=0

declare -i sum=0

while [ $i -le 100 ];do

let sum=sum+i

let i++

if [ $i -eq 50 ];then

break

fi

done

echo $sum

continue:提前结束本轮循环,而直接进入下一轮循环判断;

while condition1;do

cmd1

if condition1;then

continue

fi

cmdn

done

#!/bin/bash

#

#

declare -i i=0

declare -i sum=0

while [ $i -le 100 ];do

let sum=sum+i

let i++

if [ $i -eq 50 ];then

continue

fi

sum1=$[sum+i]

done

echo $sum

echo $sum1

特殊执行顺序

创建死循环:

============================================================

while true;do

循环体

done

退出方式;

某个测试条件满足时,让循环体执行break命令

============================================================

示例

#!/bin/bash

#

#

while true;do

ifwho |grep '^hacker\>' &> /dev/null ;then

break

fi

done

echo "hacker is up"

echo out now |write 'hacker'

sleep:命令

sleep – delay for a specified amount of time

延迟指令时间

sleep NUMBER[SUFFIX]…

while循环的特殊用法(遍历文件的行)

====================================================================================

while read variable;do

循环体

done < /path/from/sumfile

依次读取/path/from/somfile文件中的每一行,且将其赋值给variable变量;

====================================================================================

示例:找出id号为偶数的用户,显示其用户名,ID和默认shell

#!/bin/bash

#

#

while read line;do

username=`echo $line |cut -d: -f1`

userid=`echo $line |cut -d: -f3`

usershell=`echo $line |cut -d: -f7`

if [ $[$userid%2] -eq 0 ];then

echo "${username} ${userid} ${usershell}"

fi

done 

for循环的特殊用法

==========================================================================================

for((控制变量初始化;条件判断表达式;控制变量的修正语句));;do

循环体

done

控制变量初始化;仅在循环代码开始运行时执行一次;

控制变量的修正语句;每轮循环结束后会先进行控制变量修正运算,而后再做条件判断;

==========================================================================================

示例;打印九九乘法表(逆序)

#!/bin/bash

#

#

for ((i=1;i<=9;i++));do

for ((j=i;j<=9;j++));do

echo -n "$i*$j=$[i*j]"

done

echo

done

打印九九乘法表(顺序)

#!/bin/bash

#

#

for ((i=1;i<=9;i++));do

for ((j=1;j<=i;j++));do

echo -n "$j*$i=$[i*j]"

done

echo

done

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/38331

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值