Shell

来源:互联网 发布:lol网络不稳断开连接 编辑:程序博客网 时间:2024/06/08 20:14

#######################

强引用、弱引用

'' ""

[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 $j9 0父shell,子shell[root@localhost Desktop]# bash[root@localhost Desktop]# bash[root@localhost Desktop]# bash[root@localhost Desktop]# bash[root@localhost Desktop]# exitexit[root@localhost Desktop]# exitexit[root@localhost Desktop]# exitexit[root@localhost Desktop]# exitexit[root@localhost Desktop]# exitexit


#######################

算术运算符<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/bashfor ((hour=23;hour>=0;hour--))dofor ((min=59;min>0;min--))dofor (( sec=59;sec>=0;sec--))doecho -ne "After ${hour}:${min}:${sec} is end."echo -ne "\r\r"sleep 1donedonedone
#!/bin/bashfor num in {1..30}doping -c1 -w1 192.168.122.$num &>/dev/nullwhile [ "$?" -eq "0" ]doecho 192.168.122.$num is upbreak donewhile [ "$?" -ne "0" ]doecho 192.168.122.$num is downdonedone


#######################


例子:

要求:一个文件包含用户名,一个文件包含密码,若是密码行数少于用户名,则用户对应不设置密码,不更改已存在用户密码,根据不同的情况进行判别。

#!/bin/bashif [ -n "$1" -a  -n "$2" ]thenif [ -e "$1" -a  -e "$2" ]thenlines=` wc -l $1 |cut -d " " -f 1 `echo $linesfor num in $( seq 1 $lines )dousername=`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."fielseecho "Need two files to create users(username and password)."fi


0 0