大家好,欢迎来到IT知识分享网。
shell脚本:是基本与国产式,解释执行的语言
shell脚步的用处
执行系统管理和故障排除
创建简单的应用程序
处理文本或文件
shell脚本的基本结构
系统命令的组合
变量
表达式
控制语句
格式要求:
shell脚本要以.sh结尾,主要是方便识别,一目了然知道这是一个shell脚本
#!/bin/bash # 首行必须这么写,shebang机制。告诉这个脚本用bash执行,不同shell写法不同如:#!/bin/csh
shell脚本里#(井号)为注释,但第一行的特殊
脚本写完后要加执行权限
运行脚本:
./xx.sh 相对路径
/opt/xx.sh 绝对路径
或bash xx.sh
第一个shell脚本:
vi hello.sh
#!/bin/bash
echo “Hello World!”
命令执行过程:
先看是否是个别名,如果不是再看是否为内部命令,还不是找外部命令,如果还没有则报错:command not found
在运行时还可以执行远程服务器上的脚本
curl ip/xx.sh |bash
脚本调试
语法检查(只检查语法不执行)
bash -n script.sh
显示执行过程(逻辑错误)
bash -x script.sh
或自己阶段性输出
命令写错了后面的命令也会执行
脚本错误总结
语法错误 (bash -n)
命令错误
逻辑错误 (bash -x)
变量:
变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据,变量表示命名的内存空间,将数据放在内存空间中,通过变量名来获取里面存的数据。
变量类型
内置变量: PS1, PATH,SHELL, HOSTNAME,$?
用户自定义变量
不同的变量存放的数据不同,决定了
数据存储方式
参与的运算
表示的数据范围
变量的数据类型:
字符,字符串,数组
数值:整型,浮点型
Shell 脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这和别的编程语言不太一样,如golang在定义变量类型时要手动指定
she变量的命名规和大部分编程一样
变量名由数字,字母,下划线组成
必须以字母或者·下划线开头,不能以-开头,不能使用横线- 不能使用shell里面的关键字或者shell里面的命令
变量名最好有意义,并且体出现实际作用
ps的参数非常多
-A列出所有的行程
-w显示加厚可以显示较多的咨讯
-au显示所有包括含其他的资讯
-aux显示所有包含其他使用者的行程
au(x)输出格式
USERE PID %MEMVSZRSS TTY STAT START TIME COMMAND
USER:行程拥有者
PID:pid
%CPU:占用的CPU使用率
%MEM:占用的记忆体使用率
VSZ:占用的虚拟记忆体大小
RSS:占用的记忆体大小
TTY:终端的次要装置号码
(minor devic nuberof tty)
#pstree
几个重要的参数:
-A: 各进程树之间的连接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p:同时列出每个进程的PID
-u: 同时列出每个进程的所属账号名称
变量定义和引用
普通变量:生效范围为当前 shell 进程,对当前 shell 之外的其它 shell 进程,包括当前 shell
的子 shell 进程均无效
环境变量: 生效范围为当前 shell 进程及其子进程
本地变量:生效范围为当前 shell 进程中某代码片断,通
常指函数
变量的赋值:
name=“10itedu”
可以用以下多种形式
直接字符串: a=1 files=/tmp/*
变量引用: name1=“$name”
命令引用: name=`date` 或 name=$(date)
查看全部变量(包括系统自带的):
set
取消变量:
unset name
变量赋值是临时生效,当退出终端时,变量失效
在 shell 的变量中双引号的细节
a=`seq 1 10`
echo $a
1 2 3 4 5 6 7 8 9 10
echo “$a”
1
.
.
10
d
变量的引用:
$name
${date}
一般情况用$name 方式就足够了,什么时候用${}
把两个变量用_下划线连接时,
echo $name_$date
echo ${name}_$date
环境变量:可以使子进程继承父进程中的变量,但是不能反过来。如果子进程修改了父进
程中的变量,那么子进程的子进程会继承修改的那个值\
行后 c.sh 没有结果,查看进程 ps, 查看进程树 pstree 如果默认没安装手动安装(yum
install -y psmisc)
可以用 pstree 查看进程树
再执行时,子进程就可以使用父进程里面的变量
如果定义在子脚本中也定义一个 name 变量,那么在执行时会优先选择子脚本里的变量
如果子脚本里还有子脚本,会不会继承到 f.sh 里面的 name
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30047.html