1.1 什么是shell
变量
命令大礼包
判断循环
#重复性的工作 节约时间
1.2 书写shell脚本
mkdir -p /server/scripts 尽量把脚本都放在这个目录下
#!/bin/bash
这个脚本默认使用的命令解析器是 /bin/bash
shell脚本之变量
2.1 什么是变量
未知数=====变量
2.2 环境变量(全局变量)
- 大写
- 哪里都生效 都可以使用 LANG
手动创建一个环境变量
##临时创建
[root@dzc ~]# cd /server/scripts/
[root@dzc scripts]# export OLDBOY=teacher
[root@dzc scripts]# env |grep -i oldboy
OLDBOY=teacher
###永久生效
echo 'export OLDBOY=teacher' >>/etc/profile
###生效
source /etc/profile
与用户环境变量有关的文件 目录
/etc/profile、/etc/bashrc、
/etc/profile.d/ 用户登录到系统会运行这个目录下的脚本
用户环境变量配置文件
~/.bash_profile ~/.bashrc
1.1 普通变量
[root@dzc scripts]# a=100
[root@dzc scripts]# echo $a
100
[root@dzc scripts]# sh show.sh
[root@dzc scripts]# echo $a
100
[root@dzc scripts]# export a=100
[root@dzc scripts]# sh show.sh
100
1.2 特殊变量
[root@dzc scripts]# vim para.sh
#!/bin/bash
echo $1 + $2 |bc
echo $1 - $2 |bc
echo $1 \* $2 |bc
echo $1 / $2 |bc
~
~
<L, 83C written
[root@dzc scripts]# sh /server/scripts/para.sh 10 5
15
5
50
2
## $# 表示参数的个数
## $? 上一个命令的执行后的状态 状态 0 表示正确 状态非0 表示错误
1.3 向变量中存放内容
#一问一答-交互
[root@dzc ~]# read -t5 -p "请设置密码:" a
-s 输入信息的时候 不显示
-t 超时时间 timeout
-p 提示
[root@dzc ~]# vim /server/scripts/para.sh
#!/bin/bash
read -p "qingshuru 1num:" a
read -p "qingshuru 2num:" b
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1+num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1-num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1*num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1/num2}'
"/server/scripts/para.sh" 14L, 342C written
[root@dzc ~]# sh /server/scripts/para.sh
qingshuru 1num:20
qingshuru 2num:2
22
18
40
10
[root@dzc ~]# vim /server/scripts/para.sh
#!/bin/bash
read -p "qingshuru 1,2num:" a b
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1+num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1-num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1*num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1/num2}
<h" 15L, 376C written
[root@dzc ~]# sh /server/scripts/para.sh
qingshuru 1,2num:20 2
22
18
40
10
1.4 编译安装软件
切菜-备菜 ./configure
炒菜 make
上菜 make install
1.5 如何判断一个文件是否存在?
- cat + $?
- ls + $?
test -f 判断一个文件是否存在 -d 判断一个目录是否存在
[root@dzc ~]# test -f /root/oldboy.txt
[root@dzc ~]# echo $?
1
[root@dzc ~]# test -f /root/1.txt
[root@dzc ~]# echo $?
0
[root@dzc ~]# [ -f /root/1.txt ]
[root@dzc ~]# echo $?
0
[root@dzc ~]# [ -f /root/oldboy.txt ] -f判断一个文件是否存在
[root@dzc ~]# echo $?
1
[root@dzc ~]# [ -d /date ] -d判断一个目录是否存在
[root@dzc ~]# echo $?
1
[root@dzc ~]# [ -d /data ]
[root@dzc ~]# echo $?
0
### && 前一个命令执行成功(0) 在执行后面的命令
[root@oldboyedu-40 ~]# [ -f /root/oldboy.txt ] && echo file exist
file exist
### || 前一个命令执行失败(非0) 再执行后面的命令
[root@oldboyedu-40 ~]# [ -f /root/tao.avi ] || touch /root/tao.avi
[root@oldboyedu-40 ~]# ls -l /root/tao.avi
-rw-r--r-- 1 root root 0 Sep 20 10:31 /root/tao.avi
1.6 进行判断的方法
> 大于 great than -gt
>= 大于等于 great equal -ge
<=
<
== 等于 equal -eq
!= 不等于 ! -eq
1.7 做出之前的计算器,进行两个数字的加减乘除 ,加上一个判断参数个数要等于2
[root@dzc ~]# vim /server/scripts/para.sh
#!/bin/bash
if [ $# != 2 ];then
echo 错误
exit
fi
a=$1
b=$2
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1+num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1-num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1*num2}'
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1/num2}'
~
[root@dzc ~]# sh /server/scripts/para.sh 10 2
12
8
20
5
1.8 显示脚本的执行过程
sh -x /server/scripts/for.sh
第2章 for循环
2.1 for循环格式
for 名字in 列表
do
执行的命令
done
2.2 ###修改系统时间为0501到0520,然后创建文件的名字为2017-05-01.txt
for hd in {01..20}
do
date -s "201705$hd"
touch /tmp/1/$(date +%F).txt
done
2.3 优化linux开机启动项目-for循环方法
[root@dzc ~]# vim /server/scripts/for.sh
for hd in $(chkconfig|egrep -v "sshd|crond|network|rsyslog|sysstat"|awk '{print $1}')
do
chkconfig $hd off
done
来源:https://www.cnblogs.com/dzc-/p/9754743.html