字符测试
符号 | 作用 | 用法 |
---|---|---|
== | 比较两个字符串是否一致 | [ $A == $B],[[ $A == $B ]],[[ '$A' = '$B' ]]:中括号与参数之间,符号与参数之间必须有空格" |
!= | 比较两个字符串是否不等 | [ $A != $B] |
> | 前一个字符串是否大于后一个字符串 | [ $A > $B] |
< | 前一个字符串是否小于后一个字符串 | [ $A < $B] |
-n string | 测试指定的字符串是否为空 | [ -n String ] |
-s string | 测试指定的字符串是否不空 | [ -s String ] |
练习
- 传递一个用户名参数给脚本,判断此脚本的用户名跟其他基本组的组名是否一致,并将结果显示出来
#!/bin/bash
if [ $# -gt 1 ]; then
echo "wushuju"
exit 11
fi
if ! id $1&>/dev/null; then
echo "ciyonghubucunzai"
exit 10
fi
if [ $1 == `id -g -n $1` ]; then
echo "yiyang"
else
echo "id -g -n $1"
echo "buyiyang"
fi
- 传递三个参数给脚本,参数均为用户名,将此些用户的账号信息提取出来放置于/test/tmp.txt 文件中,并要求每一行首有行号
#!bin/bash
if [ $# -lt 3 ]; then
echo "参数不足"
exit 1
fi
echo 1 `sed -n '/^'$1'/p' /etc/passwd` >>/test/tmp.txt
echo 2 `sed -n '/^'$2'/p' /etc/passwd` >>/test/tmp.txt
echo 3 `grep "^$3" /etc/passwd` >>/test/tmp.txt
./脚本名.sh root zzt dyj
for循环
-
格式
for 变量 in 列表; do
循环体
done -
含义
变量的值依次替换成列表中的内容,在循环体中做相应的操作。
如何生成列表
- {1..100}
- seq [起始数 [步进长度]] 终止数: 要使用命令引用
测试
- 从1加到100
#!/bin/bash
sum=0
for I in {1..100}; do
let sum=$sum+$I
done
echo "The sum is:$sum"
- 向逐个用户问好
#!/bin/bash
LINES=`wc -l /etc/passwd | cut -d' ' -f1`
for I in `seq 1 $LINES`; do
echo hello `head -n $I /etc/passwd | tail -1 |cut -d: -f1`
done
- 依次向/etc/passwd中的每个用户问好,并显示对方的shell
#!/bin/bash
LINES=`wc -l /etc/passwd | cut -d' ' -f1`
for I in `seq 1 $LINES`; do
echo hello `head -n $I /etc/passwd | tail -1 |cut -d: -f1`
done
- 写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认为/sbin/nologin的用户,并统计shell下的用户总数
#!/bin/bash
echo "以下的用户以bash为默认shell"
grep "bash$" /etc/passwd | cut -d: -f1
echo 总个数为`grep "bash$" /etc/passwd | wc -l`
echo "以下的用户以/sbin/nologin为默认shell"
grep "nologin$" /etc/passwd | cut -d: -f1
echo 总个数为`grep "nologin$" /etc/passwd | wc -l`