1.查看当shell中变量:本地和环境变量的命令:set
查看当前shell中的环境变量:printenv/env/export
2.变量存入到内存中是字符串
3.#!/bin/bash <--表示需要Linux调用Linux内核解释器才能执行
4.显示所有以数字结尾且文件名中不包含空白的文件:ls *[^[:space:]]*[0-9]
5.重定向:>覆盖重定向 >> 追加重定向 2> 错误覆盖重定向 2>>错误追加重定向 &> 全部重定向
6.管道:管道线前面的命令结果作为后面命令的参数
shell编程实例
mkdir shell
cd shell
查看时sh test1
1.添加一个用户user1,每个用户的密码和用户名相同,并且添加密码完成后不显示passwd执行 结果,并显示添加成功信息。
vi ./test1
#!/bin/bash
#
#
useradd user1
echo "user1" | passwd --stdin user1 &>/dev/null
echo 'add user user1 success'
若添加其它几个用户,可以使用变量
#!/bin/bash
#
#
useradd $1
echo "$1" | passwd --stdin $1&>/dev/null
echo 'add user $1 success'
2.使用一个变量保存一个变量名,删除此变量中的用户,并一并删除其家目录,显示“用户删除成功”
#!/bin/bash
userdel -r $1 --> -r表示目录邮件一并删除
echo "Delete user $1 success."
3.如果用户存在,就显示用户已存在;否则,就添加此用户;
id user1 && echo "user1 exists." || useradd user1
如果用户不存在,就添加;否则,显示其已经存在;
! id user1 && useradd user1 || echo "user1 exists."
如果用户不存在,添加并且给密码;否则,显示其已经存在;
! id user1 && useradd user1 && echo "user1" || passwd --stdin user1 || echo "user1 exists."
4.如果/etc/inittab文件的行数大于50,就显示好大的文件
#!/bin/bash
LINE_NUM=”wc –l /etc/inittab | cut –d’ ’ -f1”
[$LINE_NUM –gt 50 ] && echo “big file.” || echo “small”
5.添加3个用户,并且设置密码和用户名相同,如果用户已经存在,显示:已存在添加完成之后计算系统一共有多个用户
#!/bin/bash
if ! id $1 && useradd $1 && echo "$1" | passwd --stdin $1 &>/dev/null;then
echo "add success"
else
echo "$1 exists"
fi
COUNT=`wc -l /etc/passwd | cut -d ' ' -f1`
echo "$COUNT users"
6.如果其UID=0,就显示其为管理员,否则显示其为普通用户
#!/bin/bash
NAME=root
USERID=`id -u $NAME`
if [ $USERID -eq 0 ]; then
echo "Admin"
else
echo "common user."
fi
7.判断命令历史中历史命令的总条目大于500,如果大于,则显示“Some command is done.”,否则显示:“OK”
8.给定一个用户,获取其密码警告期限,然后判断用户密码使用期限是否已经小于警告期限,如果小于,则是显示“WARN” ,否则显示密码还有多少天到期。
#!/bin/bash
C_DAY=`grep ^$1 /etc/shadow | awk -F: '{print $3}'`
M_DAY=`grep ^$1 /etc/shadow | awk -F: '{print $5}'`
W_DAY=`grep ^$1 /etc/shadow | awk -F: '{print $6}'`
N_DAY=$[`date +%s`/86400]
U_DAY=$[$N_DAY-$C_DAY]
L_DAY=$[$M_DAY-$U_DAY]
if [ $L_DAY -le $W_DAY ];then
echo "Warn."
else
echo "left day is $L_DAY"
fi
ps:date +%s :今天的秒数
9.只向默认shell为bash的用户问好(判断当前系统上是否有用户的默认shell为bash)
#!/bin/bash
L_NUM=`wc -l /etc/passwd | cut -d' ' -f1`
for I in `seq $L_NUM`
do
LINE=`head -$I /etc/passwd | tail -1`
SHELL_U=`echo "$LINE" | cut -d: -f7`
U_NAME=`echo "$LINE" | cut -d: -f1`
if [ $SHELL_U == '/bin/bash' ];then
echo "hello $U_NAME"
fi
done
也可以:
grep "bash$" /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
echo "hello"
fi
10.指定一个用户名,判断此用户的用户名和它的基本组 组名是否相同
#!/bin/bash
if ! id $1 &>/dev/null ; then
echo “No such user.”
exit 12
fi
if [ $1 == `id –n –g $1` ] ;then
echo “same”
else
echo “different”
fi
11.传给脚本一个参数:目录,输出该目录中文件最大的,文件名和文件大小:
#!/bin/bash
#
if [ -d $1 ];then
L_NUM=`du -a $1 | wc -l`
for I in `seq $L_NUM`;do
LINE=`du -a $1 | sort -nr | head -$I | tail -1`
F_SIZE=`echo $LINE | awk '{print $1}'`
F_NAME=`echo $LINE | awk '{print $2}'`
if [ -f $F_NAME ];then
echo "The max file is $F_NAME ,filesize $F_SIZE"
break
fi
done
else
echo "$1 is not a dir."
exit 2
fi
12.查询当前192.168.1.x网段内,那些IP被使用了,输出这些IP到一个文件中