频道栏目
首页 > 资讯 > Linux > 正文

linux基础3.5shell脚本1

17-04-26        来源:[db:作者]  
收藏   我要投稿

linux基础3.5shell脚本1

1.BASH脚本基础

.BASH = GNU Bourne-Again Shell,BASH 是 GNU 组织开发和推广的一个项目。

.Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环、条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。

2.创建新的shell脚本

.脚本的第一行应为: #!/bin/bash(cat /etc/shells 查看脚本可以运行的环境有哪些)

.脚本的运行

<1>chmod +x example.sh

/mnt/example.sh

<2>sh example.sh

.将文件放置在用户的$PATH的目录中 ~/bin – 用于用户的私有程序

/usr/local/bin – 本地开发,系统上的其他人使用的脚本

/usr/local/sbin - 本地开发,由root使用的脚本

.脚本调试

<1>bash -x example.sh

<2>#!/bin/bash -x

3.引用和转义

引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。

弱引用"":将字符串放置在双引号中,保留字符串中所有字符的文字值,$ ` \和!字符除外。换言之,变量扩展和命令扩展在双引号内仍起作用。

强引用'':将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展。

转义\:\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而不是PATH变量的内容。)

[root@mail-qq ~]# echo "!"

-bash: !: event not found

[root@mail-qq ~]# echo "`"

>

[root@mail-qq ~]# echo "$"

$

[root@mail-qq ~]# echo "\"

>

[root@mail-qq ~]# echo my hostname is $(hostname) ##$()=``

my hostname is mail-qq.qq.com

[root@mail-qq ~]# echo "*** my hostname is `hostname` ***"

*** my hostname is mail-qq.qq.com ***

[root@mail-qq ~]# echo '!"`$'

!"`$

[root@mail-qq ~]# echo '*** my hostname is `hostname` ***'

*** my hostname is `hostname` ***

[root@mail-qq ~]# echo ''hello,world'' ##就近匹配

hello,world

[root@mail-qq ~]# echo "'hello,world'"

'hello,world'

[root@mail-qq ~]# echo "''hello''"

''hello''

[root@mail-qq ~]# echo "\hello"

\hello

[root@mail-qq ~]# echo "\\hello"

\hello

[root@mail-qq ~]# echo "\\\hello"

\\hello

[root@mail-qq ~]# echo \\\hello\\\

> #

\hello\#

4.算术运算

算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。

运算符

++ 自增

-- 自减

- 减法

+ 加法

* 乘法

/ 除法

** 幂运算

% 余数

+= 加等 ## n+=1等价于n=n+1

-= 减等

Shell计算命令:

用$[]表示数学运算。

用expr表示数学运算。

用let指示数学运算。

用(())表示数学运算。

用[]进行比较:-lt小于 -gt大于 -le小于等于 -ge大于等于 -ne不等于 -eq等于

[root@mail-qq ~]# echo $[1+2]

3

[root@mail-qq ~]# echo $[1]

1

[root@mail-qq ~]# a=1

[root@mail-qq ~]# echo $[$[$a+1]*2]

4

[root@mail-qq ~]# echo `expr 1+2`

1+2

[root@mail-qq ~]# echo $( expr 1+2)

1+2

[root@mail-qq ~]# let a=1+2

[root@mail-qq ~]# echo $a

3

[root@mail-qq ~]# echo `expr 2 \* 3` ## *为特殊字符,需要用\转义

6

[root@mail-qq ~]# [ "1" = "2" ] && echo yes || echo no

no

[root@mail-qq ~]# [ "2" = "2" ] && echo yes || echo no

yes

[root@mail-qq ~]# [ "1" -lt "2" ] && echo yes || echo no

yes

[root@mail-qq ~]# [ "1" -le "2" ] && echo yes || echo no

yes

[root@mail-qq ~]# [ "1" -ne "2" ] && echo yes || echo no

yes

[root@mail-qq ~]# [ "1" -eq "2" ] && echo yes || echo no

no

[root@mail-qq ~]# [ "1" -lt "2" -a "1" -gt "2" ] && echo yes || echo no ## -a表示并且

no

5.脚本中的for循环

#!/bin/bash

for NUM in {1..3}

do

echo $NUM

done

test.sh

#!/bin/bash

a=li

b=zhang

echo ${a}_$b ##执行脚本输出li_zhang

show_ip.sh

#!/bin/bash

IPADDRESS=`ifconfig eth0 |grep init |grep inet6 -v |awk -F "" '{print $2}'`

HOSTNAME=`hostname`

echo "$HOSTNAME ipaddress is:$IPADDRESS" ##查看ip

host_check.sh

#!/bin/bash

for IP in 172.25.254.{1..40}

do

ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down

done

create_user.sh ##批量创建用户

#!/bin/bash

MAX=$(wc -l $1 | cut -d "" -f 1)

for NUM in $(seq 1 $MAX)

do

NAME=$(sed -n ${NUM}p $1)

PASS=$(sed -n ${NUM}P $2)

useradd $NAME

echo $PASS|passwd --stdin $NAME

done

daojishi.sh ##倒计时

#!/bin/bash

MIN=1

for ((i=5;i>=0;i--))

do

while

[ "$i" -eq "0" -a "$MIN" -gt "0" ]

do

echo -n "After ${MIN}:${i} is end "

echo -ne "\r\r"

i=59

sleep 1

((MIN--))

done

echo -n "After ${MIN}:${i} is end "

echo -ne "\r\r"

sleep 1

done

相关TAG标签
上一篇:Fragment之间三种传参方法
下一篇:游标介绍及作用
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站