shell脚本 就是将命令存放在文件里 执行文件=执行命令用于重复性操作、批量操作、自动化运维shell脚本格式第一行#!后面跟命令解释器的路径–作用:告诉脚本使用的是那种命令解释器shell脚本的执行方式:1、通过命令解释器执行脚本(sh / bash)2、路径下执行脚本(绝对路径/相对路径./)3、通过source或.执行错误重定向:重定向:标准输出1 标准输入0 错误输出2把执行命令过程中出现的错误信息保存到指定文件错误重定向可以使用“2>”或“2>>”2是指错误文件的编号空文件/dev/null执行脚本时不显示信息可以将命令定向到空文件shell变量的设置规则:1变量名通常是大写字母-可以由数字、字母和下划线组成(不能以数字开头)2等号=用于分配数值;=两边不能有空格3变量的存储类型是整数值和字符串值4给变量赋值字符串时用引号括起来5调用变量前面要加
6
进
行
算
数
运
算
时
格
式
为
:
6进行算数运算时格式为:
6进行算数运算时格式为:((算数表达式))或
[
算
数
表
达
式
]
单
引
号
和
双
引
号
的
区
别
:
单
引
号
不
能
引
用
变
量
的
值
/
双
引
号
可
以
全
局
变
量
和
局
部
变
量
查
看
全
局
变
量
:
e
n
v
e
x
p
o
r
t
变
量
−
−
−
−
−
可
以
把
局
部
变
量
转
化
为
全
局
变
量
局
部
变
量
不
能
在
子
s
h
e
l
l
中
使
用
b
a
s
h
可
以
进
入
子
s
h
e
l
l
e
x
i
t
可
以
退
出
子
s
h
e
l
l
/
e
t
c
/
p
r
o
f
i
l
e
是
s
h
e
l
l
的
主
启
动
文
件
,
针
对
所
有
用
户
都
生
效
删
除
变
量
:
u
n
s
e
t
+
变
量
名
位
置
变
量
:
执
行
脚
本
时
后
面
添
加
参
数
例
如
.
s
y
b
a
b
c
用
[算数表达式]单引号和双引号的区别:单引号不能引用变量的值/双引号可以全局变量和局部变量查看全局变量:envexport 变量-----可以把局部变量转化为全局变量局部变量不能在子shell中使用bash可以进入子shellexit 可以退出子shell/etc/profile 是shell的主启动文件,针对所有用户都生效删除变量:unset +变量名 位置变量:执行脚本时 后面添加参数 例如. syb a b c用
[算数表达式]单引号和双引号的区别:单引号不能引用变量的值/双引号可以全局变量和局部变量查看全局变量:envexport变量−−−−−可以把局部变量转化为全局变量局部变量不能在子shell中使用bash可以进入子shellexit可以退出子shell/etc/profile是shell的主启动文件,针对所有用户都生效删除变量:unset+变量名 位置变量:执行脚本时后面添加参数 例如.sybabc用n来表示$0 文件名称$1 第一个参数
2
第
二
个
参
数
特
殊
变
量
:
2 第二个参数特殊变量:
2第二个参数特殊变量:*表示所有位置参数的内容,即以一个字符串显示所有向脚本传递的参数;$*以"$1 $2 …
n
"
的
形
式
输
出
所
有
参
数
(
整
个
字
符
串
)
n"的形式输出所有参数(整个字符串)
n"的形式输出所有参数(整个字符串)#表示命令行中位置参数的个数,传递到脚本的参数个数
@
与
@与
@与相同$@以"$1" “
2
"
…
"
2" … "
2"…"n” 的形式输出所有参数 (多数的单个字符串)$
当
前
进
程
的
进
程
号
P
I
D
当前进程的进程号PID
当前进程的进程号PID?显示上一条命令的退出状态;0表示没有错误,其他任何值表明有错误
!
后
台
运
行
的
最
后
一
个
进
程
的
进
程
号
p
i
d
!后台运行的最后一个进程的进程号pid
!后台运行的最后一个进程的进程号pid 与 $@ 区别相同点 : 都是引用所有参数不同点: 只有在双引号才能体现出来,在双引号中
∗
会
把
所
有
参
数
保
持
一
个
整
体
* 会把所有参数保持一个整体
∗会把所有参数保持一个整体@ 会把参数一个一个引用expr 可以进行运算 对字符串处理: 常用的算数运算符:运算符 意义++ --递增及递减,可前置也可以后置。如a++、++a+ - * / %加减乘除与余数< <= > >=比较大小符号== !=相等 不相等&& || !逻辑与 ,逻辑或,逻辑否? :条件判断= += -= = /= %= 赋值运算符,a+=1相当于a=a+1 递增a++ 递减a-- a+=1----a=a+1 递增1数字大小比较真1 假0 条件判断:例如先进行比较 真为1 假为4[root@localhost ~]# z=$((3>6?1:4))[root@localhost ~]# echo
z
浮
点
运
算
b
c
:
b
c
是
一
个
工
具
条
件
测
试
语
句
和
i
f
流
程
控
制
语
句
的
使
用
r
e
a
d
命
令
语
法
格
式
−
p
:
用
来
设
置
提
示
信
息
−
t
:
设
置
等
待
时
间
,
单
位
是
秒
,
若
在
规
定
时
间
内
未
输
入
自
动
跳
出
。
文
件
比
较
!
为
取
反
的
意
思
判
断
两
个
文
件
谁
比
谁
旧
字
符
串
比
较
操
作
符
说
明
示
例
=
=
判
断
两
个
字
符
串
是
否
相
等
[
“
z 浮点运算bc:bc是一个工具 条件测试语句和if流程控制语句的使用read命令语法格式 -p:用来设置提示信息 -t:设置等待时间,单位是秒,若在规定时间内未输入自动跳出。 文件比较 !为取反的意思判断两个文件谁比谁旧 字符串比较 操作符说明示例==判断两个字符串是否相等[ “
z 浮点运算bc:bc是一个工具 条件测试语句和if流程控制语句的使用read命令语法格式 −p:用来设置提示信息 −t:设置等待时间,单位是秒,若在规定时间内未输入自动跳出。 文件比较 !为取反的意思判断两个文件谁比谁旧 字符串比较 操作符说明示例==判断两个字符串是否相等[ “a” == “
b
”
]
!
=
判
断
两
个
字
符
串
是
否
不
相
等
[
“
b” ]!=判断两个字符串是否不相等[ “
b”]!=判断两个字符串是否不相等[ “a” != “
b
”
]
−
z
字
符
串
判
断
字
符
串
是
否
为
空
[
−
z
“
b” ]-z 字符串判断字符串是否为空[ -z “
b”]−z字符串判断字符串是否为空[−z “a” ]-n 字符串判断字符串是否不为空[ -n “KaTeX parse error: Undefined control sequence: \< at position 90: …小于str2[ “str1” \̲<̲ “str2” ] 注意:对于…#就会递减;用于分别处理每个参数,移出去的参数 左移出去的参数不可再用 使用shift时位置参数必须是shift后数的倍数例如shift 2位置参数就必须是2 的倍数函数的使用:函数是一个脚本代码块,可以把它自定义命名,并可以在脚本中的任意位置使用这个函数 ,使用函数只需要写函数名就可以了函数的创建: function(可加可不加)函数名(){命令}函数的使用:首先定义一个函数定义完了之后在脚本中输入函数名 可以调用函数 函数返回值,函数的退出状态默认情况下 退出状态是函数的最好一条命令返回的退出状态return命令返回特定的退出码在定义函数的时候 在最后加上return N 之后在脚本中执行$?的时候返回的数就是return后的值 把函数值赋给变量使用例如: #!/bin/bash fun1(){ read -p "Input a value: " VAR —定义函数 echo
[
[
[VAR5] } NUM=
(
f
u
n
1
)
−
−
−
−
使
用
(fun1) ----使用
(fun1) −−−−使用()把函数赋值给变量 echo current num is $NUM -----使用变量 向函数传递参数函数可以使用位置参数变量 例如:#!/bin/bashfunction addem() { if [ $# -eq 0 ] || [ $# -gt 2 ] --定义函数 使用位置参数 then echo “error,need to input one or two number.” elif [ $# -eq 1 ] then echo $[ $1 + $1 ] else echo $[ $1 + $2 ] fi} echo -n "Adding 10 and 15: " value=addem 10 15
函数的位置参数 传递给函数里echo $value 函数无法从脚本命令行中直接使用位置参数 如果需要使用就得 手动传递例如:function func6 { echo $[ $1 * $2 ] 定义函数使用位置参数} if [ $# -eq 2 ] 设置条件then value=func6 $1 $2
—将脚本外的位置参数传递给函数 echo “The result is $value” else echo "Usage: badtest1 a b"fi 跳出循环:在循环过程中 强行跳出循环有两种:break和continueexit 是退出当前整个脚本的break:结束并跳出循环 相当于跳出当前所在的循环体 执行循环体之后的语句 如果循环套循环 时:break 1 跳出一层循环break 2 跳出二层循环 。。。。累加 continue:是忽略本次剩余代码 跳出本次循环执行下一次循环、
2021-01-07
最新推荐文章于 2025-05-09 16:23:44 发布