shell编程 第一章 变量

一 SHELL前言

1.什么是shell;
在这里插入图片描述
2.shell语言的特点:

SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。
Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;
作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、
建立文件并以并行的方式协调各个程序的运行。
因此,对于用户来说,shell是最重要的实用程序,
深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。

3.shell能做什么:

  1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)
  2. 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
  3. 应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)
  4. 日志分析处理程序(PV, UV, 200代码, !200代码, top 100, grep/awk)
  5. 自动化备份恢复程序(MySQL完全备份/增量 + Crond)
  6. 自动化管理程序(批量远程修改密码,软件升级,配置更新)
  7. 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  8. 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  9. 自动化扩容(增加云主机——>业务上线)
    zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上线)
  10. 俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现
  11. Shell可以做任何事(一切取决于业务需求)

4.shell多种执行方式;

1.准备测试脚本:

[root@localhost tmp]#vim file1
echo “hello 2020”
read -p "请输入您的姓名:“ name
echo “哈哈 $name是大笨蛋”

2.执行1;bash ping01.sh

3.执行2:sh ping01.sh
which bash
which sh
发现是同一个文件

4.执行3: . bash. sh

5.执行4: source bash.sh 同理执行3

6.多种执行方式的区别:

1和2的方式,是子shell
3和4的方式,是本shell
1.准备环境

vim bash.sh
#!/usr/bin/bash
cd /home/
ls

  1. 一种执行方式测试
    . bash.sh

3.观察目录改变了。说明影响的是当前。并使用子shell执行方式执行。
该种执行方式,是不同于前者SUB shell执行。
而是在当前shell执行,用于影响当前shell环境。

二 BASH SHELL

1.第二阶段shell课程概览:

  1. shell特性
    易学,高效
  2. shell变量
  3. shell条件测试,判断
  4. shell数值运算
  5. 流控、循环
    命令汇总
    if
    case
    for
    while
    until
    break 跳过
    continue 终止
    exit 退出
    shift 退出
    array 数组统计
    function 函数
  6. 企业项目

2.shell命令解释器有哪些:
shell 命令就是前一阶段所学习的大部分命令。 cp ls date组合到一起。

Linux支持的shell有哪些呢?
cat /etc/shells

chsh -l

三 变量

1.简介:
shell 变量? 用一个固定的字符串去表示不固定的内容,便于修改。

2.变量的类型:
1.自定义变量;
特性:

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

示例0:
使用变量前。麻烦
ping -c1 192.168.100.10 &>/dev/null && echo 192.168.100.10up || echo 192.168.100.10down
使用变量后,简洁

#!/bin/bash
ip=192.168.100.10
ping -c1 $ip &>/dev/null && echo i p u p ∣ ∣ e c h o " ip up || echo " ipupecho"ip down"

变量赋值(定义变量):
1.显式赋值;

  1. 显式赋值
    变量名=变量值
    示例:
    ip1=192.168.1.251
    school=“BeiJing 1000phone”
    today1=date +%F
    today2=$(date +%F)

2.read从键盘读入变量值:
2. 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"
~

3.注意事项,3种引号:
定义或引用变量时注意事项:
1
" " 弱引用
’ ’ 强引用
[root@tianyun ~]# school=1000phone
[root@tianyun ~]# echo "KaTeX parse error: Expected 'EOF', got '#' at position 61: …root@tianyun ~]#̲ echo '{school} is good’ //脱去所有字符
${school} is good

2

命令替换 等价于 $() 反引号中的shell命令会被先执行
[root@tianyun ~]# touch date +%F_file1.txt
[root@tianyun ~]# touch $(date +%F)_file2.txt

2.环境变量(了解):
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效 !!!
使变量开机、登陆生效,将变量放到~/.bash_profile

3.位置变量和预定义变量(了解):
语法
命令 参数1 参数2 参数3 …9以后特殊定义
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} …
预先定义过的变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功
示例1
示例1:

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 ' = ′ =' =$

演示
	[root@localhost ~]# chmod +x 1.sh 

[root@localhost ~]# ./1.sh 1 2 3 4 5 6 7 8 9
第2个位置参数是2
第1个位置参数是1
第4个位置参数是4
所有参数是: 1 2 3 4 5 6 7 8 9
所有参数是: 1 2 3 4 5 6 7 8 9
参数的个数是: 9
当前进程的PID是: 1946
$1=1
$2=2
$3=3
$*=1 2 3 4 5 6 7 8 9
$@=1 2 3 4 5 6 7 8 9
$#=9
$$=1946

∗ 和 *和 @区别(资料)
shell中 ∗ 与 *与 @的区别

关于$* 和 $@的 一点 认识 同是菜鸟一起学习

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

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

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

一个小例子 ,仅供参考

[Copy to clipboard] [ - ]CODE:#!/bin/bash
echo

index=1

echo “Listing args with”$":"
for arg in "$
"

do
echo “Arg # i n d e x = index= index=arg”
let “index+=1”

done

echo “所有的参数被认为是一个单词”

echo

index=1

echo “Listing args with “$@”:”
for arg in “KaTeX parse error: Expected 'EOF', got '#' at position 17: …" do echo "Arg #̲index=$arg”
let “index+=1”
done

echo “所有的参数被认为是各个独立的单词”

echo

index=1

四 变量的运算

1.整数运算:
方法一:expr
语法
方法一:expr
expr 1 + 2
expr $num1 + KaTeX parse error: Undefined control sequence: \* at position 10: 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 表达式
let sum=2+3; echo $sum
let i++; echo $i

2.小数运算(了解):

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

bc:交互运算器
scale=2 保留小数点后面两位
awk和python做了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值