Echo在windows下的命令的语法很简单。以下是Echo命令的基本语法:
echo string
其中,string是要输出的任意文本。Echo命令可以输出任何纯文本,包括数字、字母、标点符号等。
输出计算机用户名
echo My Name is %username%
输出当前时间
echo The time is %time%
关闭回显,且不显示命令行本身(另存为.bat运行)
@echo off
echo 这是第一行
将输出重定向到文件
echo “Hello World!” > d:\output.txt
如果您想要将输出附加到现有文件的末尾,则可以使用“>>”运算符。
echo “This is a second line!” >> d:\output.txt
echo在liunx下命令类似
命令格式:
echo [参数] [字符串]
常见参数:
-n:不自动换行,输出字符串后不跟随回车符。
-e:允许输出字符串中的转义字符,如“\n”表示换行符、“\t”表示制表符等。还有一些转义符可以用-h查看
-E 明确禁止反斜杠转义
常见用法:
1. 输出字符串:
echo “Hello world”
2. 输出变量值:
name=”Linux”
echo “The operating system is $name”
3. 向文件写入文本:
echo “This is a test” > test.txt
4. 输出多行文本:
echo -e “line1\nline2\nline3”
此处就是用-e参数来使后面的转义字符\n生效了,才会输出多行,
echo -e “line1\nline2\nline3”
[root@server dir]# echo -e 'aaa\bbbb'
aabbb
此处就是用-e参数来使后面的转义字符\b生效了,\b表示退格,也就是向左删除一个字符
还可以设置颜色,命令:echo -e “\e[背景颜色;文字颜色;显示方式m字符串\e[0m” ,也可以\033来代替\e
注意事项:
1. 如果字符串中包含空格或特殊字符,需要使用引号将字符串括起来,以避免被解析为命令参数。
2. 如果需要将命令的执行结果作为字符串输出,在命令前面加上“$”符号即可,如:
echo “The date is $(date)”
下面我们来写一个liunx下的脚本 设定ens33网卡
- IP:192.168.1.100/24
- 网关:192.168.1.254
[root@localhost Desktop]# vim fixip.sh ——创建新的文件
1 #!/bin/bash
2 cd /etc/sysconfig/network-scripts/
3 echo
4 echo "DEVICE=ens33" > ifcfg-ens33
5 echo "TYPE=Ethernet" >> ifcfg-ens33
6 echo "ONBOOT=yes" >> ifcfg-ens33
7 echo "BOOTPROTO=static" >> ifcfg-ens33
8 echo "IPADDR=192.168.1.100" >> ifcfg-ens33
9 echo "NATMASK=255.255.255.0" >> ifcfg-ens33
10 echo "GATEWAY=192.168.1.254" >> ifcfg-ens33
11 ifdown ens33
12 ifup ens33
添加运行权限(+x):
[root@localhost Desktop]# chmod +x fixip.sh
此时ls文件的颜色会由白色变成蓝色
下面来执行命令
[root@localhost Desktop]# ./fixip.sh
./fixip.sh: line 2: cd: etc/sysconfig/network-scripts/: No such file or directory
Device ‘ens33’ successfully disconnected.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/18)
[root@localhost Desktop]#
此时IP就会设置好,下面再来优化下脚本为交互式脚本,给变量赋值,使其更加人性化
先了解下变量赋值
[root@localhost Desktop]# A="hello" ——为变量A赋值
[root@localhost Desktop]# echo A
A
[root@localhost Desktop]# echo $A ——通过$A 调出它所表示的值(字符串)
hello
[root@localhost Desktop]# echo "$A world"
hello world
[root@localhost Desktop]#
再来了解下利用read -p输入
-p参数允许在read命令行中直接指定一个提示如:
read -p “输入网站名:” website
echo “你输入的网站名是 $website”
exit 0
运行并按提示输入 xtaa.cn
结果会是:你输入的网站名是 xtaa.cn
所以上面的配置文件可以优化为:
[root@localhost Desktop]# vim fixip.sh
1 #!/bin/bash
2 read -p "please input ipddr:" IP
3 read -p "please input netmask" MASK
4 read -p "please input gateway:" WAY
5 cd /etc/sysconfig/network-scripts/
6 echo
7 echo "DEVICE=ens33" > ifcfg-ens33
8 echo "TYPE=Ethernet" >> ifcfg-ens33
9 echo "ONBOOT=yes" >> ifcfg-ens33
10 echo "BOOTPROTO=static" >> ifcfg-ens33
11 echo "IPADDR=$IP" >> ifcfg-ens33
12 echo "NATMASK=$MASK" >> ifcfg-ens33
13 echo "GATEWAY=$WAY" >> ifcfg-ens33
14 ifdown ens33
15 ifup ens33
下面进一步学习If语句
Linux 中 大于: -gt 小于: -lt 等于: -eq
————单分支——判断3是否小于5:
[root@localhost Desktop]# vim if.sh
1 #!/bin/bash
2 if [ 3 -lt 5 ]
3 then echo "yes"
4 fi
[root@localhost Desktop]# chmod +x if.sh
[root@localhost Desktop]# ./if.sh
yes
—多分支语句:利用输入变量判断
[root@localhost Desktop]# vim if.sh
1 #!/bin/bash
2 read -p "please input a num:" NUM
3 if [ $NUM -lt 5 ]
4 then echo "lt"
5 elif [ $NUM -eq 10 ]
6 then echo "eq"
7 else echo "gt"
8 fi
[root@localhost Desktop]# ./if.sh
please input a num:10
eq
[root@localhost Desktop]# ./if.sh
please input a num:30
gt
[root@localhost Desktop]# ./if.sh
please input a num:5
gt
最后写一个脚本来检测内网主机存活状态(语句:if+for+while)
先来看下ping 操作的修饰:
- -c 指定其发送几个包
- -i 发间隔时间
- -w 等待响应时间
- &> 文件 将前面的输出结果导入到别的地方(我们要将其输出的结果不显示)
ping -c2 -i0.2 -w2 12.34.56.78 &> /dev/null
好,接下来来ping单个主机
[root@localhost poem]# vim ping.sh ——创建编写文件
1 #!/bin/bash
2 if `ping -c2 -i0.2 -w2 192.168.123.124 &> /dev/null`
3 then echo "yes"
4 else echo "no"
5 fi
[root@localhost poem]# chmod +x ping.sh ——赋权
[root@localhost poem]# ./ping.sh ——执行
no ——输出结果
[root@localhost poem]#
输出结果为 no ,表示该主机不存在或未开启(未存活)
接下来我想IP由我输入
1 #!/bin/bash
2 read -p "please input ipaddr:" IP
3 if `ping -c2 -i0.2 -w2 $IP &> /dev/null`
4 then echo "yes"
5 else echo "no"
6 fi
接下来我想要扫描整个网段要用到for或者while
- for 根据循环的次数(取值列表)
- 循环 while 根据条件循环
for用法为:
for 变量 in 取值列表
do
子语句
done
while用法为:
while 条件
do
子语句
done
下面用for来实现
[root@localhost poem]# vim ping.sh
1 #!/bin/bash
2 NET=10.168.1.
3 for IP in {100..115}
4 do
5 if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
6 then echo -e "$NET$IP is \033[31mup\033[0m" (修改输出颜色)
7 else echo -e "$NET$IP is \033[32mdown\033[0m" (修改输出颜色)
8 fi
9 done
可以用于网络嗅探
用whilt实现
[root@localhost poem]# vim ping.sh
1 #!/bin/bash
2 NET=10.168.1.
3 IP=100
4 while [ $IP -lt 115 ]
5 do
6 let IP++
7 if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
8 then echo -e "$NET$IP is \033[31mup\033[0m"
9 else echo -e "$NET$IP is \033[32mdown\033[0m"
10 fi
11 done