规范的shell脚本一般组成
-
环境声明 (如:#! /bin/bash)
-
注释文本
-
可执行的代码
-
$变量值
-
/dev/null 黑洞设备,不要的文件可以放到这里
-
认识时间命令date
[root@server0 ~]# mkdir mysq-l$(date +%F) //创建一个显示当前时间目录 ,$(date +%F)显示当前时间
[root@server0 ~]# ls
1.sh anaconda-ks.cfg iso mysq-l2019-01-07
- expr 数据运行 如:
[root@server0 ~]# expr 1 + 1 //留意空格
2
[root@server0 ~]# expr 10 \* 10 // *需要加\才可以成为乘号
100
[root@server0 ~]# expr 10 / 10
1
[root@server0 ~]# expr 10 % 3 //取10/3的余数
1
- $USER 当前用户的变量
[root@room4pc09 ~]# echo $USER
root
- 位置变量练习
- 大于9以上变量需要加echo ${10},$1-100是对应 1-100的位置
- echo $? 显示0 代表上一次命令运行成功,非0值则不成功
[root@room4pc09 桌面]# echo $?
0 //0值代表上次一次命令执行成功
[root@room4pc09 桌面]# echo $?
127 //非0值代表上次命令执行不成功
[root@room4pc09 ~]#vim 2.sh
#! /bin/bash
echo $1
echo $2
echo $3
echo $10
echo $#
echo $*
[root@room4pc09 ~]# ./2.sh pan1 pan2 pan3 pan4 pan5 pan6 pan7 pan8 pan9 pan10 //对应上面位置输出
pan1 //$1
pan2 //$2
pan3 //$3
pan{10} //$10
10 //$# 显示位置变量个数
pan1 pan2 pan3 pan4 pan5 pan6 pan7 pan8 pan9 pan10 //$* 显示所有的位置变量值
[root@server0 ~]# vim 1.sh
#! /bin/bash
useradd $1
echo $2 | passwd --stdin $1
[root@server0 ~]# chmod +x 1.sh //脚本给执行权限
[root@server0 ~]# ./1.sh ai 123456 // ai 对应$1 ,123456 对应 $2
更改用户 ai 的密码 。
passwd:所有的身份验证令牌已经成功更新。
练习1(查看当前计算机命名、版本、IP、呈现 wo ai ni ):
[root@server0 ~]# vim /root/1.sh //编写1.sh脚本
#! /bin/bash // 环境声明
echo wo ai ni // 显示wo ai ni
hostname //计算机名称
cat /etc/redhat-release //查看当前版本
ifconfig | head -3 //查看IP 前3行
[root@server0 ~]# chmod +x 1.sh //给脚本执行权限
[root@server0 ~]# ./1.sh //运行1.sh脚本
wo ai ni //对应脚本执行程序
server0.example.com
Red Hat Enterprise Linux Server release 7.0 (Maipo)
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.25.0.11 netmask 255.255.255.0 broadcast 172.25.0.255
inet6 fe80::5054:ff:fe00:b prefixlen 64 scopeid 0x20<link>
练习2(自动搭建yum脚本):
[root@server0 ~]# vim /root/yum.sh //新建一个yum脚本
#! /bin/bash //注释声明
echo '[dvd] //呈现‘yum内容’
name=pan
baseurl=file:///mnt //路径本地
enabled=1
gpgcheck=0' >/etc/yum.repos.d/dvd.repo //放到系统yum指定位置
yum clean all //yum干净所有
yum repolist
[root@server0 ~]# chmod +x /root/yum.sh //给于执行权限
[root@server0 ~]# /root/yum.sh //运行yum脚本
已加载插件:langpacks
正在清理软件源: dvd
Cleaning up everything
已加载插件:langpacks
dvd | 4.1 kB 00:00:00
(1/2): dvd/group_gz | 137 kB 00:00:00
(2/2): dvd/primary_db
[root@server0 ~]# yum -y install gcc //测试安装gcc服务
shell重定向输出
>:只收集前面命令正确输出
2>: 只收集前面命令错误输出
&>: 收集前面命令正确错误输出
练习收集>正确输出
[root@server0 ~]# echo 123 > /opt/1.txt
[root@server0 ~]# cat /opt/1.txt
123
练习收集2>错误输出
[root@server0 ~]# cat /opt/1.txt /etc > /opt/a.txt
cat: /etc: 是一个目录
[root@server0 ~]# cat /opt/1.txt /etc/ 2> /opt/a.txt
123
练习收集&>正确错误输出
[root@server0 ~]# cat /opt/1.txt /etc/ &> /opt/a.txt
[root@server0 ~]# cat /opt/a.txt
123
cat: /etc/: 是一个目录
[root@server0 ~]#
linux黑洞设备,不要的文件可以放到这里
[root@server0 ~]# ls /dev/null //linux黑洞设备,不要的文件可以放到这里
/dev/null
练习脚本3(用shell创建用户名和密码,* read -p 产生交互命令)
[root@room4pc09 ~]# vim yonghu.sh //创建脚本
#! /bin/bash //注释解析器
read -p '请输入创建帐号名:' user //交互式请创建人输出账号
read -p '请输入创建密码:' pasw //交互式请输入密码
useradd $user &> /dev/null //创建用户账号 文件保存到null
echo $pasw | passwd --stdin $user &> /dev/null //创建密码
echo $user '创建成功' //呈现创建成功
[root@room4pc09 ~]# chmod +x yonghu.sh //给脚本运行权限
[root@room4pc09 ~]# ./yonghu.sh //运行脚本
请输入创建帐号名:pan //输入账号
请输入创建密码:11 //输入密码
pan 创建成功
练习脚本4
[root@room4pc09 ~]# vim 3.sh //创建脚本
#! /bin/bash
cat -n $1 | head -2 //查看 (显示行) ,呈现2行内容
[root@room4pc09 ~]# ./3.sh /etc/passwd //运行脚本
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin