bash脚本之for语句if语句以及各种测试语句

Linux大全评论1.7K views阅读模式

bash脚本编程:

面向过程:

顺序执行

选择执行: if, case

循环执行: for, while, until

For循环

for 变量 in 列表; do

语句1;

语句2;

...

done

 

循环必须有退出条件;

 

单分支if语句:

if 条件; then

语句1

语句2

...

fi

单分支if语句例子

1:写一个脚本,实现如下功能:如果用户存在,就说明其存在;

#!/bin/bash

#

UserName=user1

if grep "^$UserName\>" /etc/passwd &> /dev/null; then

echo "$UserName exists."

fi

-------------------------------------------------------------

-------------------------------------------------------------

#!/bin/bash

UserName=user1

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

echo "$UserName exists."

fi

2:写一个脚本,实现如下功能:如果用存在,就显示其UIDSHELL

#!/bin/bash

#

UserName=user1

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

grep "^$UserName\>" /etc/passwd | cut -d: -f3,7

fi

3:写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点;

#!/bin/bash

#

Device='/dev/sda3'

if mount | grep "^$Device" &> /dev/null; then

mount | grep "/dev/sda3" | cut -d' ' -f3

fi

4:写一个脚本,实现如下功能:如果/etc/rc.d/rc.sysinit中有空白行,就显示其空白行数;

#!/bin/bash

#

File='/etc/rc.d/rc.sysinit'

if grep "^$" $File &> /dev/null; then

grep "^$" $File | wc -l

fi

 

双分支if语句:

if 条件; then

语句1

语句2

...

else

语句1

语句2

...

fi

 

练习:写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点;否则,就说明其未挂载或设备不存在;

#!/bin/bash

#

Device='/dev/sda3'

if mount | grep "^$Device" &> /dev/null; then

mount | grep "/dev/sda3" | cut -d' ' -f3

else

echo "$Device not mounted or not exist."

fi

 

多分支if语句:

语法格式:

if 条件1; then

语句1

语句2

...

elif 条件2; then

语句1

语句2

...

elif 条件3; then

语句1

语句2

...

else

语句1

语句2

...

fi

 

写一个脚本:

判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。

如果其生产商为GenuineIntel,就显示其为Intel公司;

如果其生产商为AuthenticAMD,就显示其为AMD公司;

否则,就显示无法识别;

#!/bin/bash

#

Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`

if [[ $Vendor =~ [[:space:]]*GenuineIntel$ ]]; then

echo "intel"

elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then

echo "AMD"

else

echo "Unknown"

fi

 

 

bash条件测试:

可独立执行的命令不需使用如下测试的方式;

[ expression ] 括号内一般是需要测试的表达式 如:"$a" == "$b"

[[ expression ]]

test expression

bash命令有执行状态返回值;

bash的变量类型:

本地变量

局部变量

环境变量

位置变量

特殊变量:

$?: 用于保存刚刚执行的命令的状态返回值;

0:成功执行;

1-255:失败,1,2,127

可以使用exit命令在脚本中自定义脚本执行状态返回值;如果不定义,脚本执行状态返回值取决于脚本执行结束前最后执行的那个语句的状态;

$@, $*: 所有位置参数;

$#: 位置参数的个数;

bash整数测试:

expression: 数值1 比较符号 数值2

$A 比较符号 $B

大于:-gt

小于:-lt

等于:-eq

大等:-ge

小等:-le

不等:-ne

命令执行状态返回值: 0-255

0: 正确执行

1-255: 错误执行

exit [n] 脚本执行的最后一条件命令的状态返回值;

1:写一个脚本,生成两个随机数,比较其大小;显示大数;

bash有个内置变量:$RANDOM

$RANDOM 显示随机数

#!/bin/bash

#

A=$RANDOM

B=$RANDOM

if [ $A -ge $B ]; then

echo "Max number is $A."

else

echo "Max number is $B."

fi

2:写一脚本,随机生成一个整数,判定,显示其奇偶性;

#!/bin/bash

#

A=$RANDOM

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

echo "$A: Even"

else

echo "$A: Odd"

fi

3:给定一个用户,如果其ID号大于499,就说明其是普通用户,否则,就说明其是管理员或系统用户;

#!/bin/bash

#

UserName=daemon

Uid=`id -u $UserName`

if [ $Uid -gt 499 ]; then

echo "A common user: $UserName."

else

echo "admin user or system user: $UserName."

fi

4:求200以内所有为3的整数倍的整数之和;

#!/bin/bash

#

Sum=0

for I in {1..200}; do

if [ $[$I%3] -eq 0 ]; then

Sum=$[$Sum+$I]

fi

done

echo "Sum: $Sum."

5:给定一个用户,如果其UID等于GID,就说明这是个“good guy”,否则,“Bad guy.

#!/bin/bash

#

UserName=user1

if [ `id -u $UserName` -eq `id -g $UserName` ]; then

echo "Good Guy."

else

echo "Bad Guy."

fi

6写一个脚本:计算100以内所有奇数的和以及所有偶数的和;分别显示之;

#!/bin/bash

#

EvenSum=0

OddSum=0

for I in {1..100}; do

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

EvenSum=$[$EvenSum+$I]

else

OddSum=$[$OddSum+$I]

fi

done

企鹅博客
  • 本文由 发表于 2019年9月5日 19:26:20
  • 转载请务必保留本文链接:https://www.qieseo.com/178462.html

发表评论