第一章:变量
###注意所有的操作作者都是在Linux系统上面完成的
语言的概述
shell,Python 是解释型语言
优缺点:跨平台能力强,易于调,执行速度慢
shell定义
shell 是命令解释器 ,用于与操作系统交互,用来完成各种任务,如文件操作,系统管理,网络管理等
shell 是一种程序设计语言,他有变量,有自己的语法结构等,shell程序设计语言可以编写功能很强、代码简短的程序
&: 后台运行
nohup:正在运行一个进程,退出账户是该进程不会结束
jobs:查看后台进行
bg %工作号:将一个在后台暂停的命令,变成继续执行
fg %工作号:将后台中的命令调至前台继续运行
一、变量
shell 执行方式
-
bash
-
sh
-
.
-
source ./
1和2 是子shell 3和4 是本shell 子shell是在一个虚拟环境运行脚本本机不会有痕迹(变量) 本shell是在本机运行脚本 会留下痕迹(变量)
#定义变量
变量名=变量值 例如:aa=123
追加变量
aa="$aa"456 或者 aa=${aa}456 #在变量的基础上追加变量
echo $aa #打印/查看变量是否成功赋值
查看变量
set #查看所有变量
set | grep aa(变量名) #查看aa变量
删除变量
unset 变量名 #删除变量
三目表达式
&& 和 || 是三目表达式
&&如果前面的命令成功 执行后面的命令输出 upup ,|| 前面的命令失败执行后面的命令 downdown
例如:
ping -c1 www.baidu.com &>/dev/null && echo upup || echo downdwon
交互式变量 read
read 从键盘上读取变量值 -p 指定读取时的提示符
read赋值方式 : read 变量名
例如:read -p "请输入您要查看的ip:" ip ping -c1 $ip &>/dev/null && echo upup || echo downdwon
引号
"" 弱引号 ' ' 强引号 `` 优先执行
整数运算
一: expr \ * 是乘法 \是转义符
expr 1 + 2
二:$(())
echo $((2**3)) #2的3次方
三:$[]
echo $[2**3] #2的3次方
四:let
let i++ ;echo $i #每运行一次i值加一
let i-- ;echo $i #每运行一次i值减一
let ++i ;echo $i
i++ #先赋值在运算
++i #先运算在赋值
变量内容的替换
例如:url=www.qianfeng.com
echo ${url/qianfeng/baidu} 输出的结果是www.baidu.com
echo ${url/n/N} 输出的结果是www.qiaNfeng.com(只用一个n是大写)
echo ${url//n/N}输出的结果是www.qiaNfeNg.com(全部的N都变成大写)
内容的删除
例如:url=www.sian.com.cn
echo ${#url} 输出结果是15 #获取变量的长度
echo ${url#*.} #从前往后,最短匹配 输出的结果是sian.com.cn
echo ${url##*.} #从前往后,最长匹配 输出的结果是cn
echo ${url%.*} #从后往前,最短匹配 输出的结果是www.sian.com
echo ${url%%.*} #从后往前,最长匹配 输出的结果是www
#是 从前往后的删除
%是 从后往前的删除
索引及切片
url=www.sian.com.cn
echo ${url:0:5} #从索引是0的开始打印5行
echo ${url:5:5} #从索引是5的开始打印5行
echo ${url:5} #从索引是5的开始打印后面的全部
小数运算
需要提前安装计算机程序bc
echo "2^6" | bc # 2的6次方
echo "scale=2;6/4" | bc #scale=2是保留小数后面两位
算术运算
+ - * / %(模/余) ^(幂2^3) awk -F: '$3 * 10 > 500' /etc/passwd awk -F: '{ if($3*10>500){print $0} }' /etc/passwd
环境变量
export 变量名 #声明变量
环境变量 不管在哪一个shell环境下都可以运行
ll=123 #自定义变量
export ll #把自定义变量转化为环境变量
bash #进入一个新的shell环境
echo $ll #调用变量
123 #输出结果
pstree 以树状图的方式展示进程之间的父子关系
自定义变量不允许在别的环境中运行 要想运行转化为环境变量
声明之后的变量 只能在同一个终端中使用 子系定义的变量父系不可以使用
要想在别的终端中使用变量在.bash_profile 或者是/etc/profile中声明变量
位置变量和预定义变量
运行脚本时加参数
位置变量
位置变量是$1,$2,$3,$4........
位置变量预先已经定义过
用户使用时,必须携带参数
位置变量不是程序设计的唯一方式 比如: read也可以
预定义变量
$0 脚本名/程序名
$* 所有的参数
$# 参数的个数
$? 上一个程序的返回值(0是成功(对),非0失败(错))
$$ 程序的PID
$!上一个程序的pid
例如:
#!/bin/bash echo "($1+$2)/2" |bc echo "程序名是$0" echo "程序的参数是$*"
总结: 这两种变量,在设计时已经定义好了 需要时直接调用即可
stdin
stdin 标准输入 用于非交互式
如: echo"123" | passwd --stdin 用户名