目录
shell
什么是shell
将人类语言转化为计算机的二进制,计算机内核处理,再将二进制转化成人类能识别的语言。shell介于二进制与人类语言之间,也就是解释器
linux系统中shell的种类
bash linux默认的shell
tcsh 整合了csh的功能,可以提供比csh更强大的功能
csh 类似C语言的shell
nologin 也是shell的一种类型,禁止用户登陆。
cat /etc/shells 查看系统的默认shell
除非指定,默认都是bash
什么是脚本
它是扩建语言、动态语言,也是一种编程语言。
控制软件应用程序,脚本都是以文本形式保存。只在调用时才会进行解释或编译,可以执行文本当中的特定命令,是按行执行的
shell脚本的构成
第一类 开头注明解释器 如#!/bin/bash #!/usr/bin/python
第二类 执行语句,都是系统支持的命令格式,只要系统能够执行的语句(包含第三方扩展命令)都可以作为执行语句
第三类 注释语句 #表示注释,注释的代码将不会执行
默认脚本格式 xxx.sh
脚本执行的方式
1.不需要赋予执行权限就可以执行
sh
source 点命令,也就是符号. 是bash的内部命令,是系统自带的。可以读取文件当中的可执行命令,然后会加载到shell中,不用重启直接生效
2.赋权执行
赋执行权限
chmod +x
chmod 777
./ 相对路径执行 .表示当前目录
/ 绝对路径执行
这两种方式都必须要有执行权限
工作当中都是赋权执行,sh和source只限于调试阶段。都是用绝对路径执行
脚本都是和定时任务结合
重定向与管道操作
交互式硬件设备
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定文件读取数据,可以理解为免交互 |
重定向输出 | > | 把指定结果保存到文件中,覆盖原有的内 |
>> | 在当前内容的尾部追加,不覆盖原有内容 | |
重定向错误输出 | 2> | 将错误的信息保存到指定文件,覆盖原有内容 |
2>> | 将错误的信息保存到指定文件,不会覆盖原有内容 | |
混合输出 | &> | 标准和错误都保存到文件中,覆盖原有内容 |
管道
|符号,是一种命令行符号,用于将一个命令的输出传递给另一个命令作为输入。它可以用于连接多个命令,构成一个管道,使得一个命令的输出可以作为另一个命令的输入。
变量
变量需要有范围、类型。
自定义变量 用户指定需要的参数
变量的类型
1.int型 整数
2.string字符串
3.布尔 true false
4.浮点 小数
变量名
固定名称 用户自定义 系统预设
1.不要使用linux系统的操作命令或者系统命令来指定变量名
2.不要用中文指定变量名
3.不能使用特殊符号开头,可以用_开头
4.默认原则:最好使用名称的英文指定变量名
5.要有注释,解释代码用途,离职后好交接
自定义变量
怎么定义变量
格式: 变量名=变量值
变量名区分大小写
命令
查看变量值
echo ${变量名}
设置为只读变量
readonly 变量名
1.只读变量不能重新赋值
2.只读变量不能删除
删除变量
unset 变量名
read
通过read命令来获取变量
-p 指定提示符,提示用户输入数据
read -p "" 变量名
赋值
赋时引号作用
` ` 反撇号 命令替换,把命令执行的结果赋值给变量名
' ' 单引号 强引用,打印的变量只会输出变量名,不会输出变量值
" " 双引号 弱引用,打印变量的赋值
变量作用范围
默认情况下新定义的变量只能在当前的shell环境生效
全局变量
在程序和脚本中以及全部的shell环境中都可以被引用
export 声明全局变量
一旦有重命名的变量非常麻烦,可能导致未知的不确定性,难以调试。
export 临时声明只能在当前shell中用,重启失效
/etc/profile 对所有人生效
/root/.bashrc.profile 只能对root生效
/root/.bashrc 只能对root生效
环境变量
系统提前创建好的或者是员工添加的,用来设置用户的工作环境,如配置系统行为、传递信息、控制程序执行
系统环境变量 所有人都可见、可用
用户级环境变量 只能对当前用户开放和使用
$USER 表示用户名称
$HOME 用户的宿主用户
$PWD 表示当前所在用户
$PATH 可执行程序的默认路径
位置变量
命令行参数
脚本运行时,从外部传递变量值,让脚本来运行,可以根据需要来进行处理
$n n表示的是数字 1 2 3 4 5 6 7 8 9 ${10},10以上的参数要用{}括起来
$0 表示命令本身
$1 $2 从左往右依次赋值。要在脚本执行时在外部传入变量值
例 1-11位相加
num1=$1
num2=$2
num3=$3
num4=$4
num5=$5
num6=$6
num7=$7
num8=$8
num9=$9
num10=${10}
num11=${11}
sum=$(($1+$2+$3+$4+$5+$6+$7+$8+$9+${10}+${11}))
echo $sum
预定义变量
编程语言或者脚本解释器提供的,可以自动设置和更新,但是由编程语言和脚本解释器自动完成,人工不能修改
$* $@ 表示命令和脚本需要处理的参数
$* 加引号时会把参数当成一个整体处理,不加引号会把参数分别处理
$@ 加不加引号都会把参数分开处理
$# 统计传递给脚本的参数的个数
$? 表示一条命令或者脚本执行后的返回码,返回码是0表示执行正确,所有非0的返回码都表示执行错误(只能返回上一次命令或者脚本执行的返回码)
运算
整数运算
i=$(($a+$b))
i=$[12*5]
let i=12*6
+-*/ % 加、减、乘、除、取余
i=$(expr $a+$b) 乘法前要加\
i++ 相当于i=$(($i+1)) 先赋值再加 每次自加1
i-- 先赋值再减 每次自减1
i+=1 每次自加2
++i 先加再赋值,每次自加1
--i 先减再赋值,每次自减1
简易计算器运算
bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。
简易计算器,可以支持小数运算
echo 运算 | bc