bash编程之五 字符串测试以及for循环

简介:

字符测试:

==:测试是否相等,相等为真,否则为假

!=:测试是否不等,不等为真,否则为假

>或<:将字符串转化为ASCll值然后比较其大小

-n:判断字符是否为空,空为真,不空为假

-z:判断字符是否为不空,不空为真,空则为假


bash循环结构:必须有进入条件和退出条件

while

until

for:

    for  变量 in 列表;do

        循环体;

    done

如何生成列表?

{1..100}

`seq [起始数 [步进长度] ] 结束数`


declare 声明变量

    -i 声明为整型

    -x 声明为环境变量


练习:

传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。

#!/bin/bash

if  [ $# -lt 1 ];then

echo "Usage `basename $0` ARG ..."

exit 7

fi

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

echo "User  $1 not exists!"

elif [  $1 == `id -n -g $1` ];then

echo "$1's user and grop are the same"

else

echo  "$1's user and grop not the same!"

fi


练习:

传递3个参数给脚本,第一个为整数,第二个为算数运算符,第三个为整数,将计算结果显示出来,并保留两位精度。

#!/bin/bash

if [ $# -ne  3 ];then 

echo  "Usage: `basename $0` ARG OPT ARG..."

exit 7

fi

s=`echo "scale=2;$1 $2 $3"|bc`

echo "$1 $2 $3=$s"


练习:

传递参数给脚本,参数均为用户名,把passwd里面记录的此账号的相关信息提取保存到/tmp/user.txt中,并要求有行号。

#!/bin/bash

if [ $# -lt  1 ];then 

echo  "Usage: `basename $0` ARG  "

exit 7

fi

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

echo "$1  not exists!"

else

b=`cat  user.txt|wc -l`

j=$[$b+1]

d=`grep  "^\<$1\>" /etc/passwd`

echo "$j $d" >>user.txt

 fi 


练习:

写一个脚本,判断当前主机的cpu生产商,其信息在/proc/cpuinfo文件中vendor id 一行中

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

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

否则,就显示其为非主流公司

#!/bin/bash

Info=`cat  /proc/cpuinfo |grep  vendor|cut -d: -f2|sed 's/[[:space:]]*\(.*\)/\1/'`

if [ $Info == GenuineIntel ]||[ $Info == AuthenticAMD ];then 

echo  "${Info}'s  cpu!"

else 

echo "rubbish cpu"

fi


练习:

写一个脚本,给脚本传递三个整数并显示其最大值和最小值。

#!/bin/bash

if [ $# -ne 3 ];then

echo "Usage:`basename $0` ARG1 ARG2 ARG3"

exit 1

fi


case $1  in

[[:digit:]]*) 

;;

*)

echo "ARG1 must be the  integer!"

exit 7

;;

esac

case $2  in

[[:digit:]]*) 

;;

*)

echo "ARG2 must be the  integer!"

exit 7

;;

esac

case $3  in

[[:digit:]]*) 

;;

*)

echo "ARG3 must be the  integer!"

exit 7

;;

esac

MAX=0

MIN=$1

for i in $1 $2 $3;do

if [ $MAX -lt $i ]; then

MAX=$i

fi

if [ $MIN -gt $i ];then

MIN=$i

fi

done

echo  "MAX:$MAX MIN:$MIN"


写一个脚本:

1、设定变量FILE的值为/etc/passwd

2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,例如:

    hello,root,your shell :/bin/bash

3、统计一共有多少个用户

#!/bin/bash

FILE=/etc/passwd

count=`cat /etc/passwd|wc -l`

for  i in `seq 1 $count`

do

user=`cat /etc/passwd|head -$i|tail -1|cut -d: -f1`

shell=`cat /etc/passwd|head -$i|tail -1|cut -d: -f7`

echo "Hello $user,your shell :$shell"

done

echo "there are $count users"


写一个脚本:

1添加10个用户user1到user10,但要求只有用户不存在的情况才添加

#!/bin/bash

for i  in  `seq 1 10 `;do

if  id user$i &>/dev/null ;then 

echo "user$i exists!!"

else 

useradd user$i

echo  "useradd user$i finished !"

fi

done


写一个脚本:

计算100以内所有能被3整除的正整数的和;

#!/bin/bash

declare -i sum=0

for  i in  {1..100}

do

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

                sum=$[$sum+$i]

        fi

done

echo "sum : $sum "


写一个脚本:计算100以内所有奇数的和以及所有偶数的和

#!/bin/bash

declare -i oddsum=0

declare -i evensum=0

for  i  in  `seq 1 100`

do

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

evensum=$[$evensum+$i]

else

oddsum=$[$oddsum+$i]

fi

done

echo  "oddsum:$oddsum 

evensum:$evensum"


写一个脚本分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数,形如:

bash 3user  they are:

root  redhat centos


#!/bin/bash

 shcount=`cat  /etc/passwd |grep "\<bash\>"|wc -l`

 nocount=`cat  /etc/passwd |grep "\<nologin\>"|wc -l`

user1=`cat  /etc/passwd |grep "bash\>"|cut -d: -f1`

user2=`cat  /etc/passwd |grep "\<nologin\>"|cut -d: -f1`

for  i  in $user1

do

shuser="$shuser $i"

done

for  i  in $user2

do

nouser="$nouser $i"

done

echo "bash  ${shcount}user  they are :

$shuser"

echo "nologin ${nocount}user they are:

$nouser"


















本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1734457 ,如需转载请自行联系原作者


相关文章
|
3月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
49 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
1月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
128 56
|
2月前
|
测试技术 程序员
关于字符串为空的几个性能测试
本文通过实验对比了两种字符串赋值方式(`string str=&quot;&quot;;` 和 `string str=string.Empty;`)及五种判断字符串是否为空的方法的性能差异。实验结果显示,使用 `string.Empty` 的赋值方式性能更优,且在判断字符串是否为空时,`.Length==0` 方法最为高效,其次是 `str.Equals(&quot;&quot;)` 和 `str==string.Empty` 等方法。文章提供了详细的测试代码和结果分析。
18 3
关于字符串为空的几个性能测试
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
44 2
|
1月前
|
安全 网络安全 数据安全/隐私保护
Python渗透测试之流量分析:流量嗅探工具编程
Python渗透测试之流量分析:流量嗅探工具编程
|
3月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
59 2
|
3月前
|
存储 测试技术 数据库
Python接口自动化测试框架(练习篇)-- 函数编程(一)
本文通过实际的编程练习,讲解了面向过程编程的概念和应用,包括如何定义函数、处理文件读写以及实现用户注册功能,最终将这些过程封装成函数,体现了Python作为脚本语言的面向过程编程特性。
27 2
|
3月前
|
测试技术 Python
Python接口自动化测试框架(练习篇)-- 函数编程(二)
本文通过具体的编程练习,深入探讨了Python中的函数编程,包括如何定义函数、使用参数和返回值,以及函数式编程的技巧和应用,如使用lambda表达式和递归函数解决实际问题。
26 1
|
4月前
|
Java 数据库 Spring
Java编程问题之在测试中使用CGLIB创建代理类如何解决
Java编程问题之在测试中使用CGLIB创建代理类如何解决
|
4月前
|
JSON 数据格式
Navicate数据报错之Bad Request,发送端口测试的时候,使用JSON字符串,而不是Text
Navicate数据报错之Bad Request,发送端口测试的时候,使用JSON字符串,而不是Text