shell简介

1.1 什么是shell

变量

命令大礼包

判断循环

#重复性的工作 节约时间

1.2 书写shell脚本

mkdir -p /server/scripts   尽量把脚本都放在这个目录下

#!/bin/bash

这个脚本默认使用的命令解析器是 /bin/bash

shell脚本之变量

2.1 什么是变量

未知数=====变量

2.2  环境变量(全局变量)

  1. 大写
  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 如何判断一个文件是否存在?

  1. cat + $?
  2. 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