shell编程基础

一、shell编程基础扩展

1.1 基本格式:

!/bin/bash

#! 指定脚本用的命令解释器
执行脚本
  sh:执行脚本
  sh -x:显示执行脚本的过程

1.2 变量:

临时存放数据的,方便脚本中重复使用

1.2.1命名规则:

看见变量的名称,就能知道变量的作用
不能以数字开头

1.2.2引号系列:

单引号:所见即所得
双引号:与单引号类似,能解析特殊符号`` [图片上传失败...(image-f14e09-1559560896535)]

!
不加引号:与双引号类似,可以支持通配符* {}
反引号:优先执行里面的命令

1.2.3变量分类:
1>局部变量(普通变量)
2>全局变量(环境变量)

特点:
 系统创建,在大部分地方意思一样,都是大写
env:可以系统中部分内置变量
创建环境变量:在普通变量的前面加上export,如export aaa=123
常用环境变量:
 PATH:记录命令的位置
 PS1:记录命令提示符的格式
 LANG:字符集语言

1.2.4局部变量与环境变量的区别:

局部变量只在当前环境使用,换了环境就失效
环境变量无论哪里都可以使用

https://www.processon.com/view/link/5a0e4380e4b06c8e10923353

image

1.2.5特殊变量:

?:上一条命令的返回值,返回值为0模式正确数字:表示脚本的第几个参数
0:表示脚本的名字#:命令行参数的个数;判断参数的个数
$*:脚本的所有参数

[root@m01 ~]# cat ceshi.sh
#!/bin/bash
echo  $0  $1  $2

x=$1
y=$2

awk -vn1=$x -vn2=$y 'BEGIN{print "jia:"n1+n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print "jian:"n1-n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print "cheng:"n1*n2}'
awk -vn1=$x -vn2=$y 'BEGIN{print "chu:"n1/n2}'
[root@m01 ~]# sh ceshi.sh 1000 25
ceshi.sh 1000 25
jia:1025
jian:975
cheng:25000
chu:40
[root@m01 ~]# 

awk中参数-v的作用:命令行与awk的桥梁

1.3判断

1.3.1 特殊符号:

&&:前1个命令执行成功,在执行后面的命令
||:前1个命令执行失败,在执行后面的命令

1.3.2条件表达式:[ ]

[ -d /tmp/aaa ] :判断目录是否存在
[ -f /tmp/aaa ] :判断文件是否存在
查询帮助命令:man test

\\如果前面的目录存在,显示目录已存在
[root@m01 ~]# [ -d /tmp/aaa ] && echo 'dir is exsit'
\\如果前面的目录不存在,显示目录不存在
[root@m01 ~]# [ -d /tmp/aaa ] || echo 'dir is not exsit'

1.3.3 比大小
与if判断语句相结合

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

1.3.4 if条件判断
格式:

单分支判断
双分支判断
多分支判断

书写脚本comp.sh比较两个数字的大小

注:exit 退出当前shell程序

[root@m01 /server/scripts]# cat comp.sh 
#!/bin/bash
a=$1
b=$2
//-----------------------单分支判断-------------------
if [ $# -ne 2 ]
then
   echo "$0 num1 num2"
   exit   
fi
//-----------------------------------------------------
//-----------------------双分支判断------------------
if [ $a -gt $b ]
then 
   echo "$a>$b"
else 
   echo "$a<=$b"
fi
//----------------------------------------------------
[root@m01 /server/scripts]# sh comp.sh 8 3
a>b
[root@m01 /server/scripts]# sh comp.sh 8 3
8>3
[root@m01 /server/scripts]# sh comp.sh 3 10
3<=10
[root@m01 /server/scripts]# sh comp.sh
comp.sh num1 num2
[root@m01 /server/scripts]# 

[root@m01 /server/scripts]# cat comp.sh 
#!/bin/bash
a=$1
b=$2
//-----------------------多分支判断------------------
if [ $a -gt $b ]
then
   echo "$a>$b"
elif [ $a -lt $b ] 
then
   echo "$a<$b"
else
   echo "$a==$b"
fi
//----------------------------------------------------
[root@m01 /server/scripts]# sh comp.sh 22 45
22<45
[root@m01 /server/scripts]# sh comp.sh 22 4
22>4
[root@m01 /server/scripts]# sh comp.sh 33 33
33==33
[root@m01 /server/scripts]# 

1.4 for循环

[root@m01 /server/scripts]# cat forxunhuan.sh
#!/bin/bash
for day in {01..7}
do
   echo "week$day 带小远去找 girl$day 跳舞"
done

[root@m01 /server/scripts]# sh xunhuan.sh 
week01 带小远去找 girl01 跳舞
week02 带小远去找 girl02 跳舞
week03 带小远去找 girl03 跳舞
week04 带小远去找 girl04 跳舞
week05 带小远去找 girl05 跳舞
week06 带小远去找 girl06 跳舞
week07 带小远去找 girl07 跳舞
[root@m01 /server/scripts]# 

1.5 生产案例:判断定时任务是否运行中

判断定时任务是否运行中?(运行中显示crond is running,没有运行显示crond is guale)

编写定时任务服务检查脚本
如何判断crond服务是否运行中

systemctl is-active crond
systemctl status crond
ps -ef|grep crond

编写脚本

[root@m01 /server/scripts]# cat check-service.sh 
#!/bin/bash

count=$( ps -ef|grep crond|grep -v 'grep'|wc -l)

if [ $count -eq 1 ];then
   echo 'crond is running' 
else
   echo 'crond is guale'
fi

\\\执行脚本
[root@m01 /server/scripts]# sh check-service.sh 
crond is running

\\显示脚本的执行过程
[root@m01 /server/scripts]# sh -x check-service.sh 
++ ps -ef
++ grep crond
++ grep -v grep
++ wc -l
+ count=1
+ '[' 1 -eq 1 ']'
+ echo 'crond is running'
crond is running
[root@m01 /server/scripts]# 

二、作业

2.1 #批量添加用户设置随机密码 for循环实现

[root@oldboyedu /server/scripts]# cat  batch-adduser.sh
#!/bin/bash
. /etc/profile

for item in {01..5}
do 
   #pass=$(date +%N)
   pass=$(tr -cd 'a-zA-Z0-9' </dev/urandom| head -c8)
   username="ceshi$item"   

   useradd $username
   echo $pass|passwd --stdin $username
   echo $username":"$pass>>/etc/password.txt    

done
[root@oldboyedu /server/scripts]# 
[root@oldboyedu /server/scripts]# tail -n5 /etc/passwd
ceshi01:x:1014:1014::/home/ceshi01:/bin/bash
ceshi02:x:1015:1015::/home/ceshi02:/bin/bash
ceshi03:x:1016:1016::/home/ceshi03:/bin/bash
ceshi04:x:1017:1017::/home/ceshi04:/bin/bash
ceshi05:x:1018:1018::/home/ceshi05:/bin/bash

2.2 #批量修改文件名字 for或rename

比如:touch /oldboy/oldboy.txt 批量.txt修改为.jpg
模拟环境

[root@oldboyedu ~]# mkdir -p /oldboy/alex/
[root@oldboyedu ~]# cd /oldboy/alex
[root@oldboyedu /oldboy/alex]# touch oldboy{01..5}.txt
[root@oldboyedu /oldboy/alex]# tree 
.
├── oldboy01.txt
├── oldboy02.txt
├── oldboy03.txt
├── oldboy04.txt
└── oldboy05.txt
0 directories, 5 files
[root@oldboyedu /oldboy/alex]#

方法一:for循环

方法二:rename

[root@oldboyedu /oldboy/alex]# rename .txt .jpg /oldboy/alex/*.txt

[root@oldboyedu /oldboy/alex]# tree
.
├── oldboy01.jpg
├── oldboy02.jpg
├── oldboy03.jpg
├── oldboy04.jpg
└── oldboy05.jpg

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

推荐阅读更多精彩内容