目录
1 认识shell
1.1 什么是shell
shell既是一种应用程序,又是一种程序设计语言。我们常说的shell一般是指shell语言
shell作为一种程序时通常是指用户和操作系统内核之间的交互界面。在这个界面下,用户可以通过命令行输入命令,执行各种操作,如启动程序、管理文件、进行系统设置等。
1.2 shell脚本
shell脚本,也就是shell script,是一种为shell编写的脚本程序。它是由一系列命令组成的文本文件。这些命令按顺序执行,可以用来自动化执行一系列的操作,节省用户的时间。
2 shell变量
2.1 变量的命名要求
- 区分大小写
- 不能使用程序中保留的字和变量,如if,for
- 只能使用数字、字符以及下划线,且不能以数字开头
2.2 变量的使用与设置
2.2.1 变量的分类
- 普通变量:生效范围为当前shell进程
- 环境变量:生效范围为当前shell进程及其子进程
- 本地变量:生效范围为当前shell进程中的某段代码,通常指函数
2.2.2 变量的使用
在变量名前加上$或者以${变量}的方式都可以使用变量,但我比较喜欢第二种
-
#变量的使用(echo): [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# echo ${PATH} /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# #在变量名前加上$或者${变量}使用变量的区别 [root@localhost ~]# echo $PATH123 [root@localhost ~]# echo ${PATH}123 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin123 [root@localhost ~]#
2.2.3 变量的赋值
- 变量设置的规则
- 变量和变量的值以一个封号链接
name=Root
- 等号两边不能直接接空格
#错误示范 name = Root name=dzzx my
- 变量的值若有空格可使用双引号或单引号将内容连起来
[root@localhost ~]# echo $name [root@localhost ~]# name="dzzx my" [root@localhost ~]# echo $name dzzx my [root@localhost ~]#
- 变量和变量的值以一个封号链接
- 双引号内的变量会被替换为变量的值
[root@localhost ~]# echo $var [root@localhost ~]# var="lang is $LANG" [root@localhost ~]# echo $var lang is en_US.UTF-8 [root@localhost ~]#
- 单引号中的变量不会被替换为变量的值
[root@localhost ~]# var='lang is $LANG' [root@localhost ~]# echo $var lang is $LANG [root@localhost ~]#
- 取消变量:unset 变量名
[root@localhost ~]# unset var [root@localhost ~]# echo $var [root@localhost ~]#
3 编写脚本
3.1 shell脚本创建过程
第一步:使用文本编辑器创建文件
第二步:在开头指定脚本解释器
#!/bin/bash
第三步:给文件加上可执行的权限
第四步:运行脚本
3.2 第一个shell脚本
不想用经典的hello world了
[root@localhost ~]# cat 1.sh
#!/bin/bash
echo "Quick brown fox jumps over the lazy dog 1234567890"
[root@localhost ~]# sh 1.sh
Quick brown fox jumps over the lazy dog 1234567890
[root@localhost ~]#
3.3 用shell解鸡兔同笼
3.3.1 read
read命令用于从标准输入读取数值
Usage: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Eg:
#获取变量Heads的值,并显示提示文本
[root@localhost ~]# read -p "How many heads?" Heads
How many heads?30
[root@localhost ~]# echo $Heads
30
[root@localhost ~]#
3.3.2 解题
题目:今有鸡与兔同在一个笼子里,已知头有30,腿有80,问鸡与兔各有多少只?
脚本:
#!/bin/bash
read -p "How many heads?" Heads
read -p "How many foot?" Foot
Rabbit=$(((${Foot} - 2 * ${Heads})/2))
Chicken=$((${Heads}-${Rabbit}))
echo "There are ${Chicken} chickens and ${Rabbit} rabbits !"
答案:
[root@localhost ~]# . 2.sh
How many heads?30
How many foot?80
There are 20 chickens and 10 rabbits !
[root@localhost ~]#
3.4 用shell脚本批量创建用户
3.4.1 for的语法
for 变量 in {范围}
do
条件
done
Eg:
for i in {1..4}
do
echo $i
done
3.4.2 if的语法
if [ command ]
then
语句
elif [ command ]
then
语句
else
语句
fi
3.4.3 创建100个用户
脚本:
#!/bin/bash
for i in {001..100}
do
username=user$i
if id -u ${username} >/dev/null 2>&1
then
echo useradd: user \'${username}\' already exists
else
useradd ${username}
echo useradd: user \'${username}\' was successfully created
fi
done
效果:
[root@localhost ~]# . 3.sh
useradd: user 'user01' already exists
useradd: user 'user02' already exists
useradd: user 'user03' already exists
useradd: user 'user04' already exists
......