bash常用的比较有三种 整数测试 文件测试 字符测试

现在我们开始讲第三种:字符串测试 字符串测试: 一、两个等于号== 记住==等号两边要有空格,否则会被识别成赋值的 [root@www tmp]# a=hello [root@www tmp]# b=hi [root@www tmp]# [[ $a == $b ]] [root@www tmp]# echo $? 1 二、!=表示的是测试是否不等的,不等为真,等则为假 <= >= < >字符串做大于小于一般是意义不大的 字符串做测试的时候还有单目操作符 三、字符测试常用比较操作符 -n string :测试指定的字符串是否为空,空为真,不空为假 -z string :测试指定的字符串是否不空,不空为真,空为假

#!/bin/bash if [ $1= 'q' ];then echo "Quiting..." exit 0 elif [ ! $1 = 'quit' ];then echo "Input right" fi

字符串比较的练习 scale 上图scale=2;表示的是保留精度为2

循环结构

for循环 循环:一定要有进入条件,退出条件,不然cpu会一直在工作 bash常用循环有三种:for,while,until 这三个使用的语法格式各不相同

今天只讲最简单的一个就是for循环 do和for写在一行的话,就要有;,如果do第二行的话,那for那行就不用加;号了 自己平时习惯一种就好了,都写一行吧 所以有以下两种格式 for 变量 in 列表;do
循环体 done 或者 for 变量 in 列表 do 循环体 done 当列表遍历完成之后,退出:

如何生产列表: 1、生产整数列表{1..100} 2、 seq命令替换 ——意思为序列,意思为数值序列 seq [OPTION]... LAST seq [OPTION]... FIRST LAST seq [OPTION]... FIRST INCREMENT LAST INCREMENT表示增长率

seq [起始数[步进长度]] 结束数 []表示的是[]内部是可以省略的 我们要在for中用seq的话,要用命令替换``或者$( ) 用法 'seq [起始数[步进长度]]结束数' 变量刚开始使用都被认为是字符串,如果想要他变成数值,可以用let 像SUM=0默认0就是字符串,要它为可以运算的数值,就用let SUM=0 或者用declare -i SUM=0
-i就是整型interger -x定义成环境变量 实例:进行计算1+...100的和 #!/bin/bash declare -i SUM=0 for I in {1..100} do let SUM=$[$SUM+$I] done echo "the sum is : $SUM" [root@www tmp]# bash l.sh the sum is : 5050 实例2: 对所有用户问好

[root@zabbix myshell]# cat for.sh #!/bin/bash nameid=cat /etc/passwd | cut -d: -f1 | wc -l for i in seq 1 $nameid;do Username=cat /etc/passwd | cut -d: -f1 | tail -$i | head -1 echo -e "\033[031mHello ,$Username\033[0m" done

练习

#!/bin/bash LINE=cat /etc/passwd | cut -d: -f1 | wc -l for I in seq 1 $LINE do USERName=cat /etc/passwd | cut -d: -f1 | tail -$I | head -1 USERShells=cat /etc/passwd | cut -d: -f7 | tail -$I | head -1 echo "hello,$USERName,your shells is $USERShells" done

#!/bin/bash for I in {1..10} do if [ $1 == useradd ];then $1 user$I echo "$I" | passwd --stdin user$I echo "the user$I added successful..." fi if [ $1 == userdel ];then $1 -r user$I echo "the user$I already delete..." fi done