shell编脚本概述和变量解释

shell的基本概述和规范

shell面向的对象

面向过程语言

(开发的时候,需要一步一步的执行)

  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理

  • 问题规模小,可以步骤化,按部就班处理

  • 以指令为中心,数据服务于指令

  • c,shell

面向对象语言(开发的时候将任务当作一个整体)

  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能.

  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合

  • 对象是类的具象,是一个实体

  • 问题规模大,复杂系统

  • 以数据为中心,指令服务于数据

  • java,python,golang等 云 go k8个字母s 平台

shell的概述

是将人类使用的高级语言转换成二进制,也可以将二进制翻译成高级语言。

人类写了个命令集合,用bash(shell)去翻译给硬件执行。

shell脚本的概念

  • 将要执行的命令按顺序保存到一个文本文件

  • 给该文件可执行权限

  • 可结合各种shell控制语句以完成更复杂的操作

shell脚本应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

shell编程规范

编写脚本代码

  • 使用vim文本编辑器

  • 每行一条linux命令,按执行顺序一次编写

shell脚本的组成(脚本名最好以.sh结尾,shell语法会高亮)

1.脚本申明(解释器):第一行开头“#! /bin/bash”。表示此行以下的代码语句是由shell语言编写

2.注释信息:以#开头的语句表示为注释信息。

3.可执行语句:比如echo命令用于输出“ ”之间的字符串。

shell执行脚本

1.直接调用shell解释器加上脚本的名字,bash + 脚本名 。不需要加权限

2.路径/脚本 路径:绝对路径或相对路径,而且需要x权限(加上执行权限:chmod +x 文件名)

3.source(.) 加脚本名字(不建议使用,会修改当前bash环境)

如果你想让脚本全局运行或者可以补全,要将脚本放入$PATH路径下

使用1和2执行脚本,是会新开一个bash环境去执行,不影响当前bash环境,而如果使用3去执行脚本,会直接在当前环境执行。

脚本执行逻辑和执行方式

脚本执行逻辑

1.顺序执行:程序按从上到下顺序执行

2.选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行。

3.循环执行:程序执行过程中需要重复执行多次某段语句。

脚本错误及调试

1.命令错误:不会影响接下来的命令执行,但是本条错误的命令不执行。

bash -x 脚本:模拟执行后,发现错误

2.语法错误:直接导致脚本无法运行。

bash -n 脚本:检查语法错误(在哪一行错了)(出错的行数不一定是正确的,上下左右)

3.逻辑错误:只能自己去筛查

shell脚本(安全选项)

set -e:在脚本里加,一旦出错立即停止

set -u:变量不存在不让执行

变量:如:dir =/opt

重定向与管道操作

--stdin管道操作

将管道符号“ | ”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道

管道符“|”

将第一个命令的结果当作后一个命令的处理对象。

pa aux |wc -l
echo "abc123" |passwd --stdin zhangsan

重定向(标准输出、错误输出、标准输入)

默认电脑数据的输出方向是屏幕

1.标准输出:

你发了一条指令给电脑操作, 电脑会回复结果给你,结果是一定显示在屏幕上,称为标准输出

2.错误输出:

如果电脑没有正确回复,称为错误输出

3.标准输入:

我们通过 键盘 标 扫描仪 话简 等设备输入给电脑的指令

交互式硬件设备

类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器

重新定向操作:改变输出方向

1.输出到别的终端设备(tty查看本机名)

2.输入到文件中

“ > 覆盖”

“ >> 添加”

类型 操作符 用途
重新定向输入 < 从指定文件读取数据
重新定向输出 > 将标准输出结果保存到指定的文件,并且覆盖原有文件
>> 将标准输出结果添加到指定文件的末尾,不覆盖原有内容
标准错误输出 2> 将错误信息保存到指定文件,并且覆盖原有的文件
2>> 将错误信息追加到指定文件尾部,不覆盖原有内容
混合输出 &> 将标准输出,标准错误保存到同一文件中
2>&1 将标准错误输出重新定向到标准输出
useradd zhangsan  #创建一个用户
echo"123456" > zhangsan.txt #把密码输出到文件
​
passwd --stdin zhangsan < zhangsan.txt  #从文件里读取密码
​
命令输错了会报错,当不想看到报错时,可以把它藏到文件里显示
如:li 2> aaa.txt
    cat查看就可以查看到报错了
   li 2>> aaa.txt   #同上性质,只是会添加不会覆盖
   la &>> aaa.txt   #同样>>,只会添加不会覆盖
  
   ll &> aaa.txt
   ll > aaa.txt  2>&1   #2>&1效果和&>一样
​

shell脚本变量

变量的作用:用来存放系统和用户需要使用的特定参数

变量:值可以变化的

常量:值不可以变化

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

shell不分数据类型(统一将所有的数据类型看作字符串)

变量的类型

1.自定义的变量:由用户自己定义、修改和使用

2.预定义变量 :bash中内置的一类变量

3.环境变量 :由系统维护,用于设置工作环境

env可以看到所有环境的变量

4.只读变量:常量

只可以读不可以改

5.位置变量:通过命令行给脚本程序传递参数

自定义变量

要求 方式
设置变量 变量名=变量值 两边没有空格
调用变量 echo $变量名
删除变量 unset 变量名
重新定义变量 变量名=变量值
追加变量值 变量名+=变量值

命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量: 如: if,for,hostname 命令 a=

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“ - ”,和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰StudentFirstName

  • 小峰studentFirstName

  • 下划线 student_name

变量的特殊符号

${}:定义了变量名的范围

“ ” :变量在双引号里可以识别,弱引用

‘ ’ :变量在单引号里不被识别,强引用

``:反撇号,代表调用命令执行的结果,同理别名。将一串命令重新定义,效果等于$( )

name=hyh   #变量名=变量值
age=233    #变量名=变量值
​
echo "$name $age"
hyh 233
​
echo '$name $age'    #单引号内$视为普通字符
$name $age
​
echo $(ls /opt)   
123 rh
                  #反撇号和括号使用结果都一样,提取命令执行后的结果
echo 'ls /opt'   
123 rh
​

变量追加值

格式:title=cto

title+=ylc #变量名+=追加值

[root@localhost opt]# hyh=原神
[root@localhost opt]# hyh+=启动
[root@localhost opt]# echo $hyh
原神启动
​
修改环境变量:
PATH+=:/data
​
vim /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data"

查看变量的值:

echo $变量名

name=hyh   #变量名=变量值
age=233    #变量名=变量值
​
echo  $name$age
hyh233
                 #输出多个变量的值加空格和不加空格的区别
echo $name $age
hyh 233
#如果变量名后跟了别的字符传,记得把变量名加上大括号区别开
如:
echo ${name}$age
hyh233
echo ${name} $age
hyh 233
​
echo ${name}lisi
hyhlisi
echo ${name} lisi
hyh lisi

变量作用范围

  • 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用

  • 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用

设置变量的作用范围(临时的)

格式1:export 变量名

格式2:export 变量名=变量值 (指定该变量在任何环境下都能使用)

  • 可以使用pstree 查看shell的环境

  • 输入bash进入子shell环境

  • ctrl+D组合键或者输入exit 命令,退出子shell环境

shell编脚本概述和变量解释_第1张图片

整数的运算

expr只能进行整数的运算 格式:expr 变量1 运算符 变量2[运算符 变量3] 运算符 : 加法 + 减法 - 乘法 \ * 除法 / 取余 %

let  sum=1+2
​
echo $sum 
​
3
let var=算术表达式
let sum=1+2
sum=1+2

$((var=算术表达式))和上面等价
((sum=1+2))
echo $sum
 
var= S[算术表达式]
​
var=$(expr argl arg2 arg3 ...)
​
var= expr argl arg2 arg3...'
​
echo'算术表达式’ |bc
​
​
sum=$[ ] 计算

[root@test1 ~]# vim ji.sh
#!/bin/bash
read -p "请输入第一个整数" num1
read -p "请输入第二个整数" num2
#执行加法运算
sum=`expr $num1 + $num2`
echo "运算结果为$sum"
[root@test1 ~]# chmod +x ji.sh
[root@test1 ~]# ./ji.sh 
请输入第一个整数6
请输入第二个整数9
运算结果为15
​

环境变量

  • 环境变量由系统提前创建,用来设置用户的工作环境

  • 使用env命令可以查看到当前工作环境下的环境变量

  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录

  • 变量PATH表示可执行程序的默认搜索路径

/etc/profile

#只要开机或者用户登录就下载里面的配置文件

/etc/bashrc

#每次用户登录的时候也会加载里面的配置,主要是加载功能和别名用的

~/.bashrc

#当前用户每切换一次shell环境都会自动执行,会加载/etc/bashrc

~/bash_profile

#每次用户登录的时候也会加载里面的配置,主要是加载功能和别名用。

shell编脚本概述和变量解释_第2张图片

修改环境变量:

PATH+=:/data   #将/data目录添加到搜索路径
​
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data
​
export PATH=:/data  #输出全局变量

环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户,在每次电脑开机时都会加载这个文件。每个用户还有自己的独立配置文(~/.bash_profile)。可以用来长期变更或设置某个环境变量

预定义变量(前面加echo显示)

bash 帮你定义好了 拿来用就可以了

$?:表示上一条命令执行后的返回状态,返回值0表示执行正确,非0值则表示出现异常。

$#:表示命令行中位置参数的个数

$0:表示当前执行的脚本或程序的名称

$$:表示当前bash的pid

$!:后台任务最后一个id

$*:代表返回所有参数(所有参数当成一个整体返回)

$@:代表返回所有参数(每个参数是独立的个体)

位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数
​
​
[root@test1 ~]# ./1.sh {1..10}
1 
2
10
10
1 2 3 4 5 6 7 8 9 10

变量的命令

bash

相当于一个多开的桌面

显示当前bash的pid号:echo $$

readonly

命令设置只读变量(无法修改无法删除)

product=benet
readonly product       #设置为只读变量
​
echo $product
product=accp           #只读变量不可以被重新赋值
​
unset product          #只读变量不可以被删除,unset命令用于删除变量
​

read命令获取输入内容

方法一: read -p "提示信息" 变量名 echo $变量名

方法二: echo -n “提示信息” read变量名 echo $变量名

read -p "你在干什么?" you     #定义you这个变量名的变量值
          提示信息    变量名
你在干什么? 玩原神
echo $    you
玩原神     #变量值
         

脚本示例:

脚本搭建yum仓库

#!/bin/bash
mount /dev/sr0  /mnt
cd /etc/yum.repos.d
mkdir  bak
mv *.repo  bak
​
echo "
[hyh]
name=hyh
baseurl=file:///mnt
gpgcheck=0
"  >  hyh.repo
​
yum clean all   &>/dev/null  #显示的内容放入垃圾箱
yum makecache   &>/dev/null  #显示的内容放入垃圾箱

建立一个简单的计算器脚本

shell编脚本概述和变量解释_第3张图片

注意一定要用英文符号

建立一个显示本机配置属性脚本

shell编脚本概述和变量解释_第4张图片

shell编脚本概述和变量解释_第5张图片

建立自动分区的脚本

shell编脚本概述和变量解释_第6张图片

你可能感兴趣的:(python,开发语言)