Shell脚本01

《Linux运维之道》 丁明一

Shell与Python区别:
Python是调用模块\通用的设计语言
Shell是调用命令\Linux系统自动化维护

1.Shell格式

  扩展名一般是 .sh
  cat /etc/shells  查看Shell的解释器

  正文第一行必须是解释器:
  #!/bin/bash或者#!/bin/sh
  #注释
  调用命令的代码

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190805094229915.png

2,执行Shell脚本

1,加权限,相对路径或者绝对路径执行
2,没有权限,解释器 脚本名 (bash test.sh)
3,source 脚本名 (不启动子进程,相当于脚本上所有代码都是直接在命令行上运行)
        (启动子进程,相当于代码在脚本里执行)

在这里插入图片描述
在这里插入图片描述

如下脚本

正常执行,脚本关闭,终端没啥反应
source执行,相当于在命令行输入exit,就会退出终端

在这里插入图片描述

3,变量(用$ 取变量的值)

1,自定义变量,预设变量

  1,自定义变量格式:
    变量名=值 (不能有空格)
    Shell的变量属于弱类型
    变量名:字母,数字,下划线,不能以数字开头
 2,调用变量的格式:
     echo $变量名    
     拼接
     price=12
     echo ${price}RMB
     或者加一些拼接符,但是输出的格式会不一样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3,预设变量
  echo $USER   $UID    $PWD  $PATH  
  $?   返回上一条命令执行的状态 (0代表正确,非0代表失败)
  PATH存储的是 命令 的搜索路径(类似于配置环境变量)(以冒号为分隔)
  添加路径:PATH=$PATH:/home/tarena

在这里插入图片描述
4,echo $$ 查看当前进程号

   命令行的话  查看的是bash的进程号
   脚本的话 查看的是脚本的进程号
        #!/bin/bash
        脚本代码
        if 条件:
          kill $$

5,$! 前一个后台执行的进程号
6,sleep 100 & 表示在后台执行 休眠100秒
在这里插入图片描述
7,$1,$2,$3,…脚本的位置变量(相当于传参)

vim test.sh
echo $1
echo $2
echo $#
echo $*
chmod +x test.sh
# $1脚本的第一个参数
# $2脚本的第二个参数
# $# 所有参数的个数
# $*所有参数的值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8,read命令 读取用户的输入 (相当于input)
read -p 提示信息 变量名
read -t 3 -p “请输入:” num 表示限制3秒内不输入值,自动结束

 read -p '提示信息:'
 ~$:read 变量名

在这里插入图片描述

createuser.sh

#!/bin/bash
# 创建系统用户
read -p 请输入用户名: username
read -p 请输入密码: passwd
useradd $username
echo "$username:$passwd" | chpasswd

在这里插入图片描述
在这里插入图片描述

4,判断(对数字,字符,文件或目录…进行判断)

判断的语法格式:
[  判断语句  ]    注意:方括号和判断语句之间必须有空格
&& 并且    A命令 && B命令    表示 仅当A成功时才执行B
|| 或者    A命令 || B命令    表示 仅当A失败时才执行B

在这里插入图片描述

1,字符判断
[ A == A ]  #相等(等号两边需要空格)
[ A != B ]  #不相等
[ -z $变量 ] 判断变量是否为空,为空返回True,不为空返回False
[ $USER == root ] && echo Y || echo N
[ $USER != root ] && exit 

在这里插入图片描述

2,数字判断
-eq    等于(equal)
-ne    不等于(not queal)
-gt    大于(greater than)
-ge    大于等于(great or equal)
-lt    小于(lese than)
-le    小于等于(less or equal)
[ 5 -gt 3 ] && echo Y || echo N
[ 5 -ge 3 ] && echo Y || echo N
3,文件或目录判断是否存在
[ -e 文件或目录 ]  #是否存在exist
[ -f 文件 ]  # 存在且为文件file
[ -d 目录 ]  # 存在且为目录directory
[ -r 文件或目录 ]  # 判断是否可读read
[ -w 文件或目录 ]  # 判断是否可写write
[ -x 文件或目录 ]  # 判断是否可写

5,if 语句语法格式

1),单分支
  if 判断条件 ; then      # 条件成立,执行下面命令块      
    命令块
  fi                     # fi结尾
  
  (不用分号,就需要换行了)
  if 判断条件
  then
  命令行
  if
  
2),双分支
  if 判断条件 ; then 
    命令块1
  else
    命令2
  fi      
  
3),多分支
if 判断条件 ;then
命令1
elif 判断条件 ;then
命令2
...
else
命令n
fi

在这里插入图片描述

在这里插入图片描述

6,数字运算

1),echo $[ 数字 + 数字 ]           # + - * / %
2),变量=值
  let 变量 + 数字
  或者  let 变量=数字 + 数字   # ++ -- += -= /= %=
  
a=1
let a++
echo $a

echo $[RANDOM % 10]        # 取10(不包含)以内的随机数字
echo $[RANDOM % 23]        # 取23(不包含)以内的随机数字

7,循环操作

循环操作 for while
1),for 的语法格式:
for 变量 in 值序列
do
命令块
done

2),while循环
while 判断条件
do
命令行
done
防止死循环
while :
do
echo '开始死循环'
sleep 0.1      # 休眠0.1秒 可以有效防止cpu消耗过高
done

在这里插入图片描述

echo {20..50}    
echo {20..100..5}
echo {a..z}

在这里插入图片描述
在这里插入图片描述

8,函数

1),定义函数
  函数名(){
  命令
}
2),调用函数          # 不能写()
函数名

传递参数 通过位置传参 用 $1 $2 $3 ....依次表示

注意:'$a'   表示就是$a
     "$a"   表示取a的值
printf "abc"
printf "abc\n"
echo -e "\033[32mOK\033[0m"       # \033[32m表示用颜色打印OK   \033[0m  表示关闭颜色   
systemctl status sshd  查看sshd服务的状态

cecho(){
echo -e "\033[32mOK\033[0m"
}

echo

在这里插入图片描述
在这里插入图片描述

ping -c1 172.40.91.11 1> a.txt      1表示将正确结果写入a.txt
ping -c1 172.40.91.23 2>a.txt       2表示将错误结果写入a.txt
ping -c1 172.40.91.11 > /dev/null   将原本输出到终端的内容放到这个/dev/null 类似回收站的地方

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值