bash

1.执行shell脚本的方式
(1)输入定向到shell脚本。该方式用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理。其一般形式为:
$bash < 脚本名
例如:
$bash <ex1
shell从文件ex1中读取命令行,并执行他们。当shell到达文件末尾时,终止执行,并把控制返回到shell命令状态。此时,脚本名后面不能带参数。
(2)以脚本名作为bash参数
$bash 脚本名 [参数]
例如:
$bash ex2 /user/meng /user/zhang
如果以目前shell(以.表示)执行一个脚本,则可使用如下简便形式:
$. 脚本名 [参数]
它以脚本名作为shell的命令行参数,这种方式可用来进行程序调试。
(3)将shell脚本加上可执行权限,可在提示符下直接执行。
chmod +x /mnt/ex3
/mnt/ex3 [参数]
便可直接执行










2.引号
‘’:单引号括起来的字符都作为普通字符出现
“”:双引号括起来的字符(除了\,`,$)均可作为普通字符对待.$:变量替换。\:转义(只有后面是$,`,",\时,\才是转义字符)
` :倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令,并以它的标准输出结果取代整个倒引号部分。但要注意:嵌套使用时内层的倒引号必须用反斜线将其转义。










3.注释
(1)shell程序中以#开头的正文行表示注释
(2)shell脚本第一行以#!开头的,则#!后跟的字符串就是shell的绝对路径名,为解释器。
    对于 C shell脚本,第一行通常是:#!/bin/csh
    对于bash脚本,第一行通常是#!/bin/bash或#!/bin/sh
    这说明,该脚本是用哪一种shell编写的,从而应调用相应的解释程序予以执行。 












4.预先定义的特殊变量
在shell中,,预先定义了几个有特殊含义的shell变量,他们的值只能由shell根据实际情况来赋值,而不能由用户重新设置。
(1)$#  表示命令行上参数的个数,但不包含shell脚本名本身。
(2)$?  表示上一条命令执行后的返回值(执行成功为0)
(3)$$  表示当前进程的进程号(即PID)
(4)$!  表示上一个后台命令对应的进程号,是由1~5位数字构成的数字串
(5)$-  是由当前shell设置的执行标志名组成的字符串。
(6)$*  表示在命令行中实际给出的所有实参字符串,它并不仅限于9个实参。
(7)$@  它与$*功能基本相同,表示在命令行中给出的所有实参。
 如:对date的显示,$* 显示一整行,$@则把date每部分分开换行显示。 






5.加减乘除




6.for循环











一.解释器


[root@desktop5 ~]# vim /mnt/bash.sh
[root@desktop5 ~]# chmod +x /mnt/bash.sh
[root@desktop5 ~]# /mnt/bash.sh 
hello
[root@desktop5 ~]# cat /mnt/bash.sh 
#!/bin/sh ##这是个解释器,不能乱写
echo hello
[root@desktop5 ~]# vim /mnt/bash.sh
[root@desktop5 ~]# /mnt/bash.sh ##解释方式是错的
-bash: /mnt/bash.sh: /etc: bad interpreter: Permission denied
[root@desktop5 ~]# sh /mnt/bash.sh ##加了解释方式,可以执行
hello
[root@desktop5 ~]# cat /mnt/bash.sh 
#!/etc
echo hello
[root@desktop5 ~]# vim /mnt/bash.sh
[root@desktop5 ~]# /mnt/bash.sh 
hello




二.双引号/单引号/反斜线
[root@desktop5 ~]# echo ""$5""


[root@desktop5 ~]# echo "'"$5"'"
''
[root@desktop5 ~]# echo "\"$5\""
""
[root@desktop5 ~]# echo "\"\$5\""
"$5"
[root@desktop5 ~]# echo '"$5"'
"$5"






三.ping主机是否能ping通
#!/bin/bash
for MUN in {1..10}
do
ping -c1 -w1 172.25.254.$MUN &> /dev/null && echo 172.25.254.$MUN is up || echo 172.25.254.$MUN is down
done
完整版:

当没有输入参数时从键盘读入
#!/bin/bash
if [ "$#" -eq "0" ]
then 
read -p "please give me an ip: " $1
fi
ping -c1 -w1 $* &>/dev/null && echo $* is up || echo $* is down






四.倒计时3分10秒
#!/bin/bash
MIN=3
for ((SEC=10;SEC>=0;SEC--))
do
while [ "$SEC" -eq "0" -a "$MIN" -eq "0" ]
do
echo "TIME is END                "
exit 0
done
while [ "$SEC" -eq "0" -a "$MIN" -gt "0" ]
do
echo -n "After ${MIN}m${SEC}s is end "
        sleep 1
echo -ne "\r    \r"
((MIN--))
SEC=59
done
echo -n "After ${MIN}m${SEC}s is end "
echo -ne "\r \r"
sleep 1
done






五.把/etc/*.conf 文件备份到/mnt目录下,并根据当时时间创建目录
#!/bin/bash
BACKDIR=etconfig-`date +%Y-%m-%d-%S`
mkdir -p /mnt/$BACKDIR
cp /etc/*.conf  /mnt/$BACKDIR






六.备份数据库
#!/bin/bash
BACKDIR=time-`date +%Y-%m-%d-%S`
mkdir -p /mnt/database$BACKDIR
for DB in `mysql -uroot -pfentiao -e "show databases;" -N -E |grep -E '\*|schema$' -v`
do
echo "Backing up $DB"
mysqldump -uroot -pfentiao $DB > /mnt/database$BACKDIR/${DB}.dump
done
echo "success!"


for DBDUMP in /mnt/database$BACKDIR/*
do
SIZE=$(stat --printf "%s\n" $DBDUMP)
echo "$DBDUMP $SIZE"
done


精简版:
#!/bin/bash
for DB in `mysql -uroot -pfentiao -e "show databases;" -N -E |grep -E '\*|schema$' -v`
    do
DBNAME=$DB-`date +%Y-%m-%d-%S`
echo "Backing up $DB"
mysqldump -uroot -pfentiao $DB > /mnt/$DBNAME
SIZE=`stat --printf "%s\n" /mnt/$DBNAME`
echo "/mnt/$DBNAME $SIZE"
done






七.显示ip信息
(1)只满足正常输入
[root@desktop5 ~]# vim /mnt/show_ip.sh
[root@desktop5 ~]#  /mnt/show_ip.sh eth1
please give me a interface: 
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:0d:1e:46  txqueuelen 1000  (Ethernet)
        RX packets 324310  bytes 31546800 (30.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 302333  bytes 26607948 (25.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


[root@desktop5 ~]# vim /mnt/show_ip.sh
[root@desktop5 ~]# cat /mnt/show_ip.sh
#!/bin/bash
read -p "please give me a interface: " $1
ifconfig $1

[root@desktop5 ~]# vim /mnt/show_ip.sh
[root@desktop5 ~]#  /mnt/show_ip.sh
please give me a interface: eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:0d:1e:46  txqueuelen 1000  (Ethernet)
        RX packets 361925  bytes 35244977 (33.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 342854  bytes 30165866 (28.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


[root@desktop5 ~]#  /mnt/show_ip.sh
please give me a interface: fsr
fsr: error fetching interface information: Device not found
[root@desktop5 ~]# cat /mnt/show_ip.sh
#!/bin/bash
read -p "please give me a interface: " A
B=ifcfg-$A
for B in `ls /etc/sysconfig/network-scripts | grep ifcfg`
do 
ifconfig $A
break
done
(2)考虑错误输入情况,并提示可以输入的参数








八.判断一个文件是否存在


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值