Shell脚本入门
约 1447 字
预计阅读 3 分钟
1
2
3
|
#!/bin/sh
a="hello world!"
echo "a is : $a"
|
运行结果:
#!
指定要使用的shell
/bin/sh
执行过程中,若出现命令执行失败,则立即停止执行
/bin/bash
执行过程中,若出现命令执行失败,仍会继续执行
- 若不指定命令解释器,系统会默认使用
/bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/bash
cd /etc/sysconfig/network-scripts/
echo "TYPE=Ethernet" > ifcfg-ens33
echo "BOOTPROTO=static" >> ifcfg-ens33
echo "IPADDR=192.168.1.100" >> ifcfg-ens33
echo "NETMASK=255.255.255.0" >> ifcfg-ens33
echo "GATEWAY=192.168.1.254" >> ifcfg-ens33
echo "DNS1=218.85.157.99" >> ifcfg-ens33
echo "DNS2=8.8.8.8" >> ifcfg-ens33
echo "DEFROUTE=yes" >> ifcfg-ens33
echo "NAME=ens33" >> ifcfg-ens33
echo "DEVICE=ens33" >> ifcfg-ens33
echo "ONBOOT=yes" >> ifcfg-ens33
systemctl restart network #重新启动网络服务
|
ps:
1
2
|
ifdown ens33 //关闭ens33网卡
ifup ens33 //开启ens33网卡
|
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线
_
。
- 不能使用标点符号。不能使用bash里的关键字(可用help命令查看保留关键字)。
与Linux交互,可以通过脚本获取键盘输入的结果
-n
:限制读取N个字符就自动结束读取,如果没有读满N个字符就按下回车或遇到换行符,则也会结束读取。
-N
:严格要求读满N个字符才自动结束读取,即使中途按下了回车或遇到了换行符也不结束。换行符或回车算一个字符。
-p
:给出提示符。默认不支持\n
换行,要换行需要特殊处理,见下文示例。
例如,-p "请输入密码:"
-r
:禁止反斜线的转义功能。这意味着""会变成文本的一部分。
-s
:静默模式。输入的内容不会回显在屏幕上。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/bash
cd /etc/sysconfig/network-scripts/
read -p "IPADDR:" ip
read -p "GATEWAY:" gate
echo "TYPE=Ethernet" > ifcfg-ens33
echo "BOOTPROTO=static" >> ifcfg-ens33
echo "IPADDR=$ip" >> ifcfg-ens33
echo "NETMASK=255.255.255.0" >> ifcfg-ens33
echo "GATEWAY=$gate" >> ifcfg-ens33
echo "DNS1=218.85.157.99" >> ifcfg-ens33
echo "DNS2=8.8.8.8" >> ifcfg-ens33
echo "DEFROUTE=yes" >> ifcfg-ens33
echo "NAME=ens33" >> ifcfg-ens33
echo "DEVICE=ens33" >> ifcfg-ens33
echo "ONBOOT=yes" >> ifcfg-ens33
systemctl restart network
|
判断语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/bash
# 请用户输入一个数字
echo "请输入一个整数:"
read number
# 使用if语句判断输入的数字是否为正数、负数或零
if [ $number -gt 0 ]; then # $ 前和 0 后的空格是必须的!!!
echo "这是一个正数"
elif [ $number -lt 0 ]; then
echo "这是一个负数"
else
echo "这是零"
fi #if结束
|
-gt
(greater than) 大于
-lt
(less than) 小于
-eq
(equal) 等于
-ne
(not equal) 不等于
-le
(less than or equal) 小于等于
-ge
(greater than or equal)大于等于
- /dev/zero:空字符填充设备
- /dev/null:黑洞文件(“位桶”)
- 通常用于丢弃数据或将数据重定向到一个虚拟的黑洞,也就是什么都不做。这个设备文件不会存储数据,而是会立即丢弃所有写入它的内容。这在很多情况下非常有用,特别是当你不想保留输出或不关心输出时。
1
2
3
4
5
6
7
|
#!/bin/bash
if ping -c2 -i0.5 -W2 192.168.10.2 > /dev/null; then
echo "yes"
else
echo "no"
fi
|
1
2
3
4
5
6
7
|
#!/bin/bash
# 使用for循环遍历数字范围 1 到 5
for number in {1..5}
do
echo "当前数字是: $number"
done
|
运行结果:
1
2
3
4
5
|
当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 5
|
1
2
3
4
5
6
7
|
#!/bin/bash
for ip in {1..254}
do
if ping -c2 -i0.5 -W2 192.168.10.$ip > /dev/null then
echo "192.168.10.$ip is alive"
fi
done
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
ip=0
while [ $ip -lt 254 ]
do
let ip++ #递增 ip 变量的值
if ping -c2 -i0.5 -W2 192.168.10.$ip > /dev/null; then
echo "192.168.10.$ip is alive"
fi
done
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/bash
case $1 in
1)
echo 1
;;
2)
echo 2
;;
3)
echo 3
;;
*)
echo none
;;
esac
|
运行结果:
1
2
3
4
|
[root@os43 Desktop]# ./case.sh 2 # case.sh为$0 2为$1
2
[root@os43 Desktop]# ./case.sh 7
none
|
Linux的内置变量
- $0:表示当前脚本的名称或命令。
- $1,$2, … $n:表示脚本或命令的参数。例如,$1表示第一个参数,$2表示第二个参数,以此类推。