Linux Shell编程及自动化运维实现——shell概述及变量

shell简介

在这里插入图片描述

SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称;Shell是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;

Shell 的作用:
自动化批量系统初始化程序 、批量软件部署程序
应用管理程序 、日志分析处理程序
自动化备份恢复程序、自动化管理程序、自动化信息采集及监控程序
小游戏、排序算法实现等,同样还能基于业务需求

  • SHELL执行方式
1:bash   bash.sh
2:sh   bash.sh
3:.  bash.sh
4: source bash.sh

区别在于
1和2的方式,是子shell
3和4的方式,是本shell

shell变量

shell 变量:用一个固定的字符串去表示不固定的内容,便于修改。
变量的类型
自定义变量

  • 自定义变量(示例:ping01.sh引入变量)

定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前shell中有效

如使用变量:

#!/bin/bash
ip=192.168.100.10
ping -c1 $ip &>/dev/null  && echo $ip  up ||   echo "$ip  down"

变量赋值(定义变量):

显式赋值
变量名=变量值
示例:

ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F`
oday2=$(date +%F)

read 读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名 //-t 等待5秒,后超时
read -n 2 变量名 //-n 只记录几个字符
read -p “请输入您测试的IP地址:” ip

ping -c1 $ip &>/dev/null && echo " i p u p " ∣ ∣ e c h o " ip up" || echo " ipup"echo"ip
down"

引用符号

" " 弱引用
’ ’ 强引用
优先执行

  • 环境变量

定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效 !!!

位置变量和预定义变量
命令 参数1 参数2 参数3 …9以后特殊定义
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} …

预先定义过的变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功

如:

# vim test.sh
#!/usr/bin/bash

echo “第2个位置参数是$2”
echo “第1个位置参数是$1”
echo “第4个位置参数是$4”

echo “所有参数是: $*”
echo “所有参数是: $@”
echo “参数的个数是: $#”
echo “当前进程的PID是: $$”

echo ‘$1=’$1
echo ‘$2=’$2
echo ‘$3=’ 3 e c h o ′ 3 echo ' 3echo*=’ ∗ e c h o ′ * echo ' echo@=’ @ e c h o ′ @ echo ' @echo#=’KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ echo ' = ′ =' =$

shell中 ∗ 与 *与 @的区别

∗ 所 有 的 位 置 参 数 , 被 作 为 一 个 单 词 . 注 意 : " * 所有的位置参数,被作为一个单词. 注意:" .:"*“必须被”“引用.
@ 与 @ 与 @*同义,但是每个参数都是一个独立的”“引用字串,这就意味着参数被完整地传递,
并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的
单词.
注意:”$@"必须被引用.

$@ $* 只在被双引号包起来的时候才会有差异
双引号括起来的情况:
$*将所有的参数认为是一个字段
$@以IFS(默认为空格)来划分字段,如果空格在“”里面,不划分。采用LS的脚本运行./test 1 “2 3” 4 来发现差异

没有括起来的情况是 @ 和 @和 @*一样的,见到IFS就划分字段。还是采用LS的脚本运行./test 1 “2 3” 4 来发现差异

  • 变量的运算
  • 整数运算
    方法一:expr
    expr 1 + 2
    expr $num1 + $num2 + - * / %
    +加
    -减
    *乘
    /除
    %取余

方法二:$(())
echo ( ( (( ((num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
echo $(((5-3)*2))
echo ( ( 2 ∗ ∗ 3 ) ) / / ( 幂 ) 2 的 3 次 方 s u m = ((2**3)) //(幂)2的3次方 sum= ((23))//23sum=((1+2)); echo $sum

方法三:$[]
echo $[5+2] + - * / %
echo $[5**2]

方法四:let 表达式
let sum=2+3; echo $sum
let i++; echo $i

  • 小数运算

echo “2*4” |bc bc:交互运算器
echo “2^4” |bc
echo “scale=2;6/4” |bc bc:交互运算器
awk ‘BEGIN{print 1/2}’
echo “print 5.0/2” |python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值