一个完整脚本的组成:
脚本声明:#!/bin/bash
脚本注释:#ghvhjggj
脚本命令:ls pwd
[root@Redhat ~]# vim haha.sh
#!/bin/bash
#jiaobenshili
pwd
ls -l
[root@Redhat ~]# bash haha.sh
/root
total 16
-rw-------. 1 root root 1034 Feb 16 07:47 anaconda-ks.cfg
drwxr-xr-x. 2 root root 40 Feb 21 19:52 Desktop
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Documents
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Downloads
-rw-r--r--. 1 root root 37 Feb 23 17:25 haha.sh
-rw-r--r--. 1 root root 1085 Feb 15 23:51 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Music
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Pictures
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Public
-rw-r--r--. 1 root root 50 Feb 21 19:53 stderr.txt
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Templates
drwxr-xr-x. 2 root root 6 Feb 16 18:25 Videos
[root@Redhat ~]# vim haha.sh
#!/bin/bash
#jiaobenshili
echo "$0"
echo "$#,$*"
echo "$1,$3,$5"
echo “
0
"
输
出
这
个
脚
本
的
名
字
e
c
h
o
"
0" 输出这个脚本的名字 echo "
0"输出这个脚本的名字echo"#,$*” 总共接收了几个参数,这些参数都是什么
echo “$1,$3,
5
,
5,
5,?” 你接收到的第1,3,5个参数是什么,上一条命令的返回值
[root@Redhat ~]# bash haha.sh a b c d e f a-f就是参数
haha.sh
6,a b c d e f
a,c,e
[root@Redhat ~]# bash haha.sh
haha.sh
0,
,,
[root@Redhat ~]# ./haha.sh 这是第二种执行脚本的方式,输入完整路径,可能权限不够
-bash: ./haha.sh: Permission denied
[root@Redhat ~]# chmod u+x haha.sh
[root@Redhat ~]# ./haha.sh
./haha.sh
0,
,,
操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
返回值为0,则为存在,非0就是不存在
[root@Redhat ~]# [ -f /etc/fstab ] 判断这个文件是否存在,是不是
[root@Redhat ~]# echo $?
0
[root@Redhat ~]# [ -f /etc/abcd ]
[root@Redhat ~]# echo $?
1
&&逻辑与,前面成立了才执行后面的
[root@Redhat ~]# [ -d /etc/ ] && echo "ok"
ok
[root@Redhat ~]# [ -d /abc ] && echo "ok"
[root@Redhat ~]# //不存在就啥也没有
||逻辑或 若前面失败,则执行后面
[root@Redhat ~]# echo $USER //输出当前用户的名称
root
[root@Redhat ~]# [ $USER = root ] && echo "Admin" || echo "User"
Admin
[root@Redhat ~]# su admin
[admin@Redhat root]$ [ $USER = root ] && echo "Admin" || echo "User"
User
!逻辑非
[root@Redhat ~]# [ ! $USER = root ] && echo "User"
[root@Redhat ~]# su admin
[admin@Redhat root]$ [ ! $USER = root ] && echo "User"
User
操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[root@Redhat ~]# echo $?
0
[root@Redhat ~]# [ 5 -gt 5 ]
[root@Redhat ~]# echo $?
1
[root@Redhat ~]# free -m //查看内存情况,以M为单位
total used free shared buffers cached
Mem: 1987 841 1146 9 0 248
-/+ buffers/cache: 592 1395
Swap: 2047 0 2047
[root@Redhat ~]# free -m | grep Mem: //提取Mem这一行
Mem: 1987 842 1145 9 0 248
[root@Redhat ~]# free -m | grep Mem: | awk '{print $4}' //再提取第四列,查看当前可用的内存的值
1145
[root@Redhat ~]# [ `free -m | grep Mem: | awk '{print $4}'` -lt 1024 ] && echo "buzu" || echo "chongzu"
chongzu //有反引号,作用是执行其中的命令,并取得结果的值
-z 是否为空值
[root@Redhat ~]# [ -z $HAHA ]
[root@Redhat ~]# echo $?
0
if语句:
单分支
[root@Redhat ~]# vim haha.sh
if [ ! -e /media/haha ]
then
mkdir /media/haha
fi
[root@Redhat ~]# ll /media
total 0
[root@Redhat ~]# bash haha.sh
[root@Redhat ~]# ll /media/
total 0
drwxr-xr-x. 2 root root 6 Feb 25 20:34 haha
双分支
[root@Redhat ~]# vim haha.sh
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null //ping三次,每次间隔0.2秒,最长响应时间3秒,最后输入到Linux回收站
if [ $? -eq 0 ]
then
echo "Host $1 is on-line"
else
echo "Host $1 is off-line"
fi
root@Redhat ~]# chmod u+x haha.sh
[root@Redhat ~]# ./haha.sh 192.168.43.94
Host 192.168.43.94 is off-line
[root@Redhat ~]# ./haha.sh 10.1.1.150
Host 10.1.1.150 is on-line
多分支
[root@Redhat ~]# vim haha.sh
read -p "Enter: " GRADE //读取用户输入的参数,赋值给变量GRADE,-p给用户一个提醒
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "Pass"
else
echo "Fail"
fi
[root@Redhat ~]# ./haha.sh
Enter: 88
Excellent
[root@Redhat ~]# ./haha.sh
Enter: 77
Pass
[root@Redhat ~]# ./haha.sh
Enter: 69
Fail
[root@Redhat ~]# ./haha.sh
Enter: 1001
Fail
[root@Redhat ~]# vim user.txt
zhangsan
lisi
wangwu
zhaoliu
[root@Redhat ~]# vim haha.sh
read -p "Enter: " PASSWD
for UNAME in `cat user.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exist"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
fi
done
[root@Redhat ~]# ./haha.sh //本来都没有,运行完就都有了
Enter: xxxx //为这几个用户设置的密码
[root@Redhat ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
[root@Redhat ~]# id lisi
uid=1002(lisi) gid=1002(lisi) groups=1002(lisi)
[root@Redhat ~]# id wangwu
uid=1003(wangwu) gid=1003(wangwu) groups=1003(wangwu)
[root@Redhat ~]# id zhaoliu
uid=1004(zhaoliu) gid=1004(zhaoliu) groups=1004(zhaoliu)
[root@Redhat ~]# vim ip.txt
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4
[root@Redhat ~]# vim haha.sh
for IP in `cat ip.txt`
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "$IP is on-line"
else
echo "$IP is off-line"
fi
done
[root@Redhat ~]# ./haha.sh
10.1.1.1 is off-line
10.1.1.2 is off-line
10.1.1.3 is off-line
10.1.1.4 is off-line