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,大宝剑
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 1. shell脚本: 包含一些命令或声明,并符合一定格式的文本文件  格式要求:首行shebang(#!)机制...
    尛尛大尹阅读 1,873评论 0 1
  • Bash内置基本变量 PWD : 显示当前的工作目录 OLDPWD : 显示上一次的工作目录 ~:用户家目录 - ...
    魏镇坪阅读 1,512评论 0 6
  • 一、为何要学习shell编程? Linux系统中会大量的使用shell,工作中我们也需要自动化实现服务。 例如:自...
    王亚楠ooo阅读 225评论 0 0
  • 一、shell编程基础扩展 1.1 基本格式: #!/bin/bash  #! 指定脚本用的命令解释器执行脚本  ...
    文娟_狼剩阅读 414评论 0 3
  • 如果可以单纯,还是单纯一点好。 可终究命运翻云覆雨手,前途难测。答主认为,最好的方式,还是洞悉人情练达,怀有清晰的...
    天生我剑阅读 173评论 0 0