shell的琐碎命令学完以后,开始shell的各种语法这个判断哪个判断的,当时学的时候虽然痛苦但是很高兴,因为自己在写程序,不知道大家有没有这个感觉呢!嘿嘿。。
运算符号 + - * / %取余数 (( ))在这里面不需要取消特殊含义 [ ] ( )放到当前shell里的子shell
运算命令 let expr
echo `expr $a + $b`
-------------------------------------------------
流程控制
exit 退出脚本
分支 结构
--------------------
单分支
if 条件表达式;then
语句块
。。。。
fi
---
if 条件表达式
then
语句块
。。。。
fi
------------------
查看htpd 是否启动的脚本 (单分支的)
1 #!/bin/bash
2 service httpd status &> /dev/null
3 if [$? -eq 0 ]; then
4 echo "httpd is running!!"
5 fi
6 echo "script over!!"
查看状态
[root@zjy ~]# netstat -utnalp | grep httpd
---------------------
双分支
单分支
if 条件表达式;then
语句块
。。。。
else
语句块
。。。。
fi
-------------------
1 #!/bin/bash
2 service httpd status &> /dev/null
3 if [$? -eq 0 ]; then
4 echo "httpd is running!!"
5 else
6
7 service httpd start
8 fi
多分支
-------------
if 条件表达式; then
语句块
elif 条件表达式; then
语句块
else
语句块
fi
-------------
成绩1-100
1-60 差
61-80 良
81-100 优
输入成绩 区分成绩好坏 read -p 键盘输入
1 #!/bin/bash
2 read -p "please your cj: " cj
3 if [ -z $cj ];then
4 echo "清输入你的成绩"
5 exit 3 设一个返回值 零一个脚本可以套入这个脚本 如果这个脚本成功后才可以执行当前脚本 看的是第一个脚本的返回值
6 fi
7 if [ $cj -ge 1 ] && [ $cj -le 60 ];then
8 echo "差!!"
9 elif [ $cj -ge 61 ] && [ $cj -le 80 ];then
10 echo "良!!"
11 elif [ $cj -ge 81 ] && [ $cj -le 100 ];then
12 echo "优秀!!"
13 else
14 echo "清输入你的成绩!"
15 fi
-------------------------
分支里面可以嵌套
1 #!/bin/bash
2 read -p "please your cj: " cj
3 if [! -z $cj ];then
4
5 if [ $cj -ge 1 ] && [ $cj -le 60 ];then
6 echo "差!!"
7 elif [ $cj -ge 61 ] && [ $cj -le 80 ];then
8 echo "良!!"
9 elif [ $cj -ge 81 ] && [ $cj -le 100 ];then
10 echo "优秀!!"
11 else
12 echo "清输入你的成绩!"
13 fi
14 else
15 echo "aaaa"
16 fi
------------------------
循环结构 当有值付变量的时候他就一直执行 ,如果没有他就done了
for 变量 in 变量数值列表
do
循环体
done
----------
1 #!/bin/bash
2 for i in one two three
3 do
4 echo "plj"
5 echo "ppp"
6 echo "333"
7 done
8 echo "aaaaaaaaaaa"
----------
造数工具
seq 100
seq 10 20
每次加几
seq 20 2 30
-------------------
造数工具
echo{1...100}
---------
作一个192.168.1.的网段里那个网络是通的
1 #!/bin/bash
2 i=192.168.1
3 for a in `seq 254`
4 do
5 ping -c 4 $i.$a &> /dev/null
6 if [ $? -eq 0 ];then
7 echo "$i.$a"
8 fi
9 done
----------
加上()
1 #!/bin/bash
2 i=192.168.1
3 for a in `seq 254`
4 do
5 (ping -c 4 $i.$a &> /dev/null
6 if [ $? -eq 0 ];then
7 echo "$i.$a"
8 else
9 echo "$i.$a not"
10
11 fi)&
12 done
--------------------
while 循环 注意不要写成死循环
while 条件表达式
do
语句块
done
------
1 #!/bin/bash
2 i=1
3 while [ $i -le 10 ]
4 do
5 echo $i
6 i=`expr $i+1` 重新复值 下次循环 新值生效
7 done
----
1 #!/bin/bash
2 i=1
3 while [ $i -le 10 ]
4 do
5 echo $i
7 let i++ 和上面等效
8 i=i+1
9 done
-----------------
1 #!/bin/bash
2 i=1
3 while [ $i -le 10 ]
4 do
5 echo $i
6 i=`expr $i + 1`
7 sleep 1 停顿一秒
8 done
-----
批量添加用户
1 #!/bin/bash
2 i=1
3 while [ $i -le 10 ]
4 do
5
6 if [ $i -le 9 ];then
7
8 useradd user0$i
echo user$i | passwd --stdin user0$i &> /dev/null
9 else
10 useradd user$i
11 echo user$i | passwd --stdin user$i &> /dev/null
12 fi
13 let i++
14 done
----------
自己选择指定的用户
1 #!/bin/bash
2 read -p "清输入添加用户的个数" num
3 read -p "清输入用户的前缀" name
4 read -p "清输入用户的密码" pass
5
6 i=1
7 while [ $i -le 10 ]
8 do
9
10 if [ $i -le 9 ];then
11
12 useradd ${name}0$i
13 echo $pass | passwd --stdin ${name}0$i &> /dev/null
14 else
15 useradd $name$i
16
17 echo $pass | passwd --stdin $name$i &> /dev/null
18 fi
19 let i++
20 done
-------------
C语言的循环
for ((初始值;条件;步长 ))
do
循环体
done
-------
1 #!/bin/bash
2 for ((i=1;i<=10;i++ ))
3 do
4 ecjp $i
5 done
---------------------
until 循环 条件表达式不成立的时候循环的 一旦成立就会终止
until 条件表达式
do
语句块
done
---
1 #!/bin/bash
2 i=10
3 until [ $i -lt 0 ]
4 do
5 echo $i
6 let i--
7 done
-------------------
while 里的: 代表永远为真
1 #!/bin/bash
2 while :
3 do
4 echo "plj"
5 sleep 1
6 done
--------------------------------------------------------
变量替换
:- 如果前面的变量有值,则会显示变量的数值,如果没有就会显示后面的数值。
httpd=${HTTPD-/usr/sbin/httpd}
${name:-word} 如果name存在且非null 则返回其值;否则 返回word
用途 如果变量没定义 返回默认值
例子
[root@svr10 ~]# echo ${name:-plj}
plj
[root@svr10 ~]# name=jing
[root@svr10 ~]# echo ${name:-plj}
jing
[root@svr10 ~]# unset name
[root@svr10 ~]# echo ${name:-plj}
plj
[root@svr10 ~]# echo $name
[root@svr10 ~]#
:= 如果前面的变量有值则会显示变量的数值,如果没有就会把后面的数值给前面的空变量里
${name:=word} 如果name存在且非null 则返回他的值;否则 设置他为word 并返回其值
用途 如果变量没定义 给变量赋值
例子
[root@svr10 ~]# name=yaya
[root@svr10 ~]# echo ${name:=plj}
yaya
[root@svr10 ~]# unset name
[root@svr10 ~]# echo ${name:=plj}
plj
[root@svr10 ~]# echo $name
plj
[root@svr10 ~]#
:+ 如果前面的变量有值则会显示后面的数值,如果没有就什么也不显示
${name:+word} 如果name存在且非null 则返回word;否则返回null
用途 测试变量是否定义
例子
[root@svr10 ~]# name=plj
[root@svr10 ~]# echo ${name:+yaya}
yaya
[root@svr10 ~]# unset name
[root@svr10 ~]# echo ${name:+yaya}
[root@svr10 ~]#
:? 如果前面的变量有值则会显示变量的值,如果没有就会出现错误提示并且退出脚本
${name:?word} 如果name存在且非null 则返回返回他的值;否则显示name:word 并退出当前的
命令或脚本 若省略word则显示name: parameter null or not set
用途 捕捉由于变量未定义所导致的错误
例子
[root@svr10 ~]# name=plj
[root@svr10 ~]# echo ${name:?undefined}
plj
[root@svr10 ~]# unset name
[root@svr10 ~]# echo ${name:?undefined}
bash: name: undefined
[root@svr10 ~]# echo ${name:?}
bash: name: parameter null or not set
[root@svr10 ~]#
在脚本里使用:?
[root@svr10 ~]# cat a.sh
#!/bin/bash
name=plj
unset name
echo ${name:?abc}
echo "ok"
[root@svr10 ~]# sh a.sh
a.sh: line 4: name: abc
[root@svr10 ~]# cat a.sh
#!/bin/bash
name=plj
#unset name
echo ${name:?abc}
echo "ok"
[root@svr10 ~]# sh a.sh
plj
ok
截取变量值
${变量名#*/} 从左向右最短匹配删除
${变量名##*/} 从左向右最长匹配删除
例子
[root@localhost shell]# echo $MAIL
/var/spool/mail/root
[root@localhost shell]# echo ${MAIL#*/}
var/spool/mail/root
[root@localhost shell]# echo ${MAIL##*/}
root
[root@localhost shell]#
${变量名%/*} 从右向左最短匹配删除
${变量名%%/*} 从右向左最长匹配删除
例子
[root@localhost shell]# echo $MAIL
/var/spool/mail/root
[root@localhost shell]# echo ${MAIL%/*}
/var/spool/mail
[root@localhost shell]# echo ${MAIL%%/*}
[root@localhost shell]# echo ${MAIL%%/root}
/var/spool/mail
[root@localhost shell]#