shell编程基础

主要内容:

1.格式
2.变量
3.判断
4.循环

一、格式

1.#!
[root@backup scripts]# vim chek.sh 
#!/bin/bash

#!/bin/bash
其中#!叫做幻数,用来指定脚本用的命令解释器

2.执行脚本

用命令sh执行脚本
参数 -x 显示脚本执行的过程

[root@m01 scripts]# sh test-v2.sh 2 5
0.4
10
7
-3
[root@m01 scripts]# sh -x test-v2.sh 2 5
+ x=2
+ y=5
+ '[' 2 -lt 2 ']'
+ awk -vn1=2 -vn2=5 'BEGIN{print n1/n2}'
0.4
+ awk -vn1=2 -vn2=5 'BEGIN{print n1*n2}'
10
+ awk -vn1=2 -vn2=5 'BEGIN{print n1+n2}'
7
+ awk -vn1=2 -vn2=5 'BEGIN{print n1-n2}'
-3

二、变量:定义一些变量,方便在脚本里面进行重复使用

1.命名规则:

1.看到变量名称,就能识别变量是什么内容

[root@m01 scripts]# date=`date +%F-%w`
[root@m01 scripts]# echo $date
2019-05-30-4

2.不能以数字开头

[root@m01 scripts]# date01=`date +%F-%w`
[root@m01 scripts]# echo $date01
2019-05-30-4
[root@m01 scripts]# 01date=`date +%F-%w`
-bash: 01date=2019-05-30-4: command not found
2.引号系列

1.单引号:所见即所得
2.双引号:`` !
类似单引号,特殊符号会被解析运行
3.不加引号:与双引号类似 支持通配符 * {} ? [] [^]
4.反引号:优先执行 将结果拿出来使用

[root@m01 scripts]# oldboy='old  man'
[root@m01 scripts]# echo $oldboy 
old man
3.变量分类

1.局部变量(普通变量)

取变量内容

[root@m01 scripts]# week=7
[root@m01 scripts]# echo $week
7
[root@m01 scripts]# echo $weekday

[root@m01 scripts]# echo ${week}day
7day

2.全局变量(环境变量)

1.特点:

1.系统创建的
2.大部分环境下意思一样
3.全局变量一般都是大写,但是大写的变量名不一定是大写

2.常见的环境变量

1.PATH:命令的位置
2.PS1:命令提示符的格式
3.LANG:字符集

3.创建环境变量:变量定义前加export

[root@m01 scripts]# env |grep DATE
[root@m01 scripts]# echo $DATE

[root@m01 scripts]# export DATE=`date +%F-%T`
[root@m01 scripts]# echo $DATE
2019-05-30-19:35:34
[root@m01 scripts]# env |grep DATE
DATE=2019-05-30-19:35:34

PS:重新连接后失效

4.取消变量:unset

[root@m01 scripts]# unset DATE
[root@m01 scripts]# echo $DATE

[root@m01 scripts]# env |grep DATE
[root@m01 scripts]# 

4.特殊变量

1.$?:上一条命令的返回值,执行成功返回值为0,失败返回值非0

[root@m01 scripts]# pwd
/server/scripts
[root@m01 scripts]# echo $?
0
[root@m01 scripts]# pwa
-bash: pwa: command not found
[root@m01 scripts]# echo $?
127
[root@m01 scripts]# 

2.$#:显示脚本的命令行中参数的个数

[root@m01 scripts]# cat test.sh 
#!/bin/bash
echo $#
[root@m01 scripts]# sh test.sh  a b c d e f 
6
[root@m01 scripts]# 

3.$*:显示脚本所有的参数

[root@m01 scripts]# cat test.sh 
#!/bin/bash
echo $*
[root@m01 scripts]# sh test.sh  a b c d e f 
a b c d e f

4.$数字:

$1,$2...$n:显示脚本的第n个参数(n>1)

[root@m01 scripts]# cat test.sh 
#!/bin/bash
echo $1 $2 $3
[root@m01 scripts]# sh test.sh  a b c d e f 
a b c 

$0:表示脚本的路径名字

[root@m01 scripts]# cat test.sh 
#!/bin/bash
echo $1 $2 $3 $0
[root@m01 scripts]# sh test.sh  a b c d e f 
a b c test.sh

三、判断

1.特殊符号

1.&&:前一个命令执行成功,再执行后一条命令

[root@m01 scripts]# pwd && echo success
/server/scripts
success

2.||:前一条命令执行失败,在执行后一条命令

[root@m01 scripts]# pwa || echo failed
-bash: pwa: command not found
failed
2.条件判断:[ ]

1.文件目录:

1.-d :判断目录是否存在
2.-f:判断文件是否存在

[root@m01 scripts]# [ -d /etc ] && echo dir exists
dir exists
[root@m01 scripts]# [ -d /ect ] || echo dir not exists
dir not exists
[root@m01 scripts]# [ -f /etc/rsyncd.conf ] && echo File exists
File exists
[root@m01 scripts]# [ -f /etc/ip.txt ] || echo File not  exists
File not exists

2.比大小

-eq:=
equal 等于
-ne:!=
not equal 不等于
-gt:>
great than 大于
-ge:>=
great equal 大于等于
-lt:<
less than 小于
-le:<=
less equal 小于等于

3.if 条件判断

格式:
if [ 判断条件 ];then
满足条件,执行的操作
else
不满足条件执行的操作
fi

echo "hostname:"   `ssh $ip  hostname`
      if [ $? -ne 0 ]
      then
             action "host $ip connect failed!"   /bin/false
      else
             action "host $ip connect success"   /bin/true
      fi

用awk进行计算并结合if判断

[root@m01 scripts]# cat test.sh 
#!/bin/bash
x=$1
y=$2
awk -vn1=$x   -vn2=$y  'BEGIN{print n1/n2}'
awk -vn1=$x   -vn2=$y  'BEGIN{print n1*n2}'
awk -vn1=$x   -vn2=$y  'BEGIN{print n1+n2}'
awk -vn1=$x   -vn2=$y  'BEGIN{print n1-n2}'
[root@m01 scripts]# sh  test.sh 26 8
3.25
208
34
18

4.循环

[root@m01 scripts]# cat DBJ.sh
#!/bin/bash
for n in {1..7}
do 
  echo "week$n带思远去找girl$n,大宝剑"
done
[root@m01 scripts]# sh DBJ.sh
week1带思远去找girl1,大宝剑
week2带思远去找girl2,大宝剑
week3带思远去找girl3,大宝剑
week4带思远去找girl4,大宝剑
week5带思远去找girl5,大宝剑
week6带思远去找girl6,大宝剑
week7带思远去找girl7,大宝剑

你可能感兴趣的:(shell编程基础)