强引用、弱引用
- '' ""
-
[root@localhost Desktop]# echo "I have a $fruit"
I have a
[root@localhost Desktop]# echo 'I have a $fruit'
I have a $fruit
[root@localhost Desktop]# echo Make \$\$ Fast\!
Make $$ Fast!
[root@localhost Desktop]# echo Make $$ Fast!
Make 4119 Fast!
[root@localhost Desktop]# echo #I have a banana#
[root@localhost Desktop]# echo \#I have a banana
#I have a banana
[root@localhost Desktop]# echo '#I have a banana'
#I have a banana
[root@localhost Desktop]# echo `pwd`
/root/Desktop
[root@localhost Desktop]# echo ' "Goodafternoon" '
"Goodafternoon"
-
- 变量
-
[root@localhost Desktop]# i=9
[root@localhost Desktop]# j=0
[root@localhost Desktop]# echo $i $j
9 0
父shell,子shell
[root@localhost Desktop]# bash
[root@localhost Desktop]# bash
[root@localhost Desktop]# bash
[root@localhost Desktop]# bash
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
[root@localhost Desktop]# exit
exit
-
算术运算符
<value>++ 赋值后增1 <value>-- 赋值后减1
- 减法 + 加法
** 幂运算 * 乘法
/ 除法 % 余数
+= 加等 -= 减等
计算命令:$[],expr,let,(())
循环:
- for do done
- while do done
-
例子:1+2+...+100,数据库备份
vim 100.sh
#!/bin/bash
for i in {1..100}
do
((j+=i));
echo $j
done
chmod +x 100.sh
./100.sh
显示结果:
1
3
6
10
...
5050
-
vim mysql.sh
#!/bin/bash
for name in ` mysql -uroot -predhat -e "show databases;" -NE | grep - E "^\*|^u|schema$" -v `
do
mysqldump -uroot -predhat $name > /mnt/${name}.dump
echo "$name is ok."
done
test条件判断:
- 语法:test EXPRESSION 或[EXPRESSION]
-
[root@localhost Desktop]#[ -n westos ];echo $?
0
[root@localhost Desktop]#[ -z westos ];echo $?
1
字符串比较运算符:==、!=
[root@localhost Desktop]#[ abc=ABC ];echo $?
0
[root@localhost Desktop]#[ abc=ABC ];echo $?
1
[root@localhost Desktop]#[ abc!=ABC ];echo $?
0
数字比较运算符
- -eq 判断是否相等,相等返回0;
- -ne 判断是否不等,别等返回0;
- -lt 判断是否小于,小于返回0 ;
- -le 判断是否小于等于,若小于等于为0;
- -gt 判断是否大于,大于返回0;
- -ge 判断是否大于等于,若大于等于返回0。
-
[root@localhost Desktop]#[ 1 -eq 1 ];echo $?
0
[root@localhost Desktop]#[ 1 -ne 1 ];echo $?
1
[root@localhost Desktop]#[ 1 -gt 2 ];echo $?
1
文件状态运算符
- 语法: test -{-b|-c|-e|-f|-d|-L} filename|direcrtory
- -b:判断是否为块设备
- -c:判断是否为字符文件
- -e:判断文件是否存在
- -f:判断是否为普通文件
- -d:判断是否是目录
- -L:判断是否为链接文件(软连接)
- 二进制文件运算符:-ef -nf -ot
- 逻辑运算符:-o -a ! && ||
-
{ if;then fi }
{if ;then else fi}
{if ;then else if; then else if; then ... else fi}
case "$1" in
);;
);;
);;
esac
-
简易一天倒计时:
#!/bin/bash
for ((hour=23;hour>=0;hour--))
do
for ((min=59;min>0;min--))
do
for (( sec=59;sec>=0;sec--))
do
echo -ne "After ${hour}:${min}:${sec} is end."
echo -ne "\r \r"
sleep 1
done
done
done
-
#!/bin/bash
for num in {1..30}
do
ping -c1 -w1 192.168.122.$num &>/dev/null
while [ "$?" -eq "0" ]
do
echo 192.168.122.$num is up
break
done
while [ "$?" -ne "0" ]
do
echo 192.168.122.$num is down
done
done
例子
- 要求:一个文件包含用户名,一个文件包含密码,若是密码行数少于用户名,则用户对应不设置密码,不更改已存在用户密码,根据不同的情况进行判别。
-
#!/bin/bash
if [ -n "$1" -a -n "$2" ]
then
if [ -e "$1" -a -e "$2" ]
then
lines=` wc -l $1 |cut -d " " -f 1 `
echo $lines
for num in $( seq 1 $lines )
do
username=`sed -n ${num}p $1`
password=`sed -n ${num}p $2`
ckuser=`getent passwd $username`
[ -z "$ckuser" ]&&( useradd $username
echo $password |passwd --stdin $username )||(echo $username exist!)
done
elif [ ! -e "$1" ]
then
echo "The usrnamefile is not exit."
else
echo "The passwordfile is not exit."
fi
else
echo "Need two files to create users(username and password)."
fi