shell笔记

在学习的时候整理的零散笔记

shell就是解决我们运维工作中经常重复性的工作,我们将工作中每天要干的重复性的工作放在一个脚本中,然后运行,解决了大部分的重复性的工作,可以做更多的其它事情。

写shell的标准程序

*.sh                                         脚本的名字后面一般要加.sh的后缀

#!/bin/bash                          你用什么是什么shell写的脚本

#Autor : xxx                         你的名字

#Data:xxxx                           创建脚本的时间

#Descripton:xxxx                描述这个脚本是干什么用的

运行shell脚本的方法

1.bash  *.sh                           用bash  执行

2.chmod +x *.sh                  给shell脚本加执行权限

3.cat  *.sh |bash                    加管道符执行

4./data/*.sh                         用绝对路径执行

5.http://ip/*.sh|bash         远程调用服务器的脚本执行

6.将脚本放到任意一个$PATH变量里面的路径下面

 

bash -n  *.sh                         检查脚本中的语法错误

bash  -x  *.sh                        跟踪调试脚本

如果命令能识别变量就不用加$,如果不能就要加$

变量分为系统自带的只读变量和自定义的变量,系统自带的只读变量是不可更改的

自定义变量命名规则

1.不能使用系统的保留名字

2.只能使用数字,字母还有下划线,但是数字不能开头

3.设置变量的名字要见名知义

4.统一命名规则,大驼峰,就是所有的单词首字母大写

 

bash中的变量一般分为:局部变量 ;环境(全局)变量;本地变量;位置变量;特殊变量

局部变量:

局部变量只能对当前shell执行,不能在其它shell进程执行,不能在父进程和子进程执行

例:name=xixi                给xixi设置一个变量名字为$name

name=$USER          可以引用变量

name=`hostname`  可以引用命令

set :可以查看已经定义的所有变量

unset 变量  :删除变量,当我们执行完shell的时候会留下许多不用的垃圾变量,当过去很长的时间会在系统内留下许多的垃圾变量,会大量的占用系统的内存,建议用完变量以后就删除。

echo $$  可以查看当前的进程编号

echo $PPTD 可以查看父进程的编号

pstree -p       可以查看所有进程的编号

 

环境(全局)变量

全局变量能传到子进程,但是不能传到父进程,在变量附加完成以后要声明这个是全局变量 export

例 :name=xixi     export $name   或  export  name=xixi

env可以查看变量

 

环境变量

环境变量是bash自己建的特殊变量,能直接调用

例:$UID  $PATH $SHELL ……

 

只读变量和位置变量

只读变量是不能修改和删除的  readonly -p  或declare -r 查看只读变量

readonly   name=xixi   声明一个只读变量 ,只读变量的生命周期一般是当前进程的结束

位置变量是让写的脚本更灵活,加不同的参数,执行不同的功能

在脚本代码中调用通过命令行传递给脚本的参数

例:$1   $2   $3 …. 分别对应的a   b   c  …..   它对应的可以是文件也可以对应目录

$* :所有字符的参数

$@:所有字符的参数

$#:所有参数的个数

$0 :代表脚本的名字

shift:换位符,当一个程序执行完成以后整体的参数会往左移,默认移一位,也可以更改,也就是说$1对应的a执行完成以后,会自动的往左移一位,$1对应的变成b继续执行

 

退出状态

echo $?  查看脚本成不成功

0代表成功,1-255代表失败

echo $? 的判断是移最后一条命令的结果为准,成功的话返回值是0,不成功返回值是1-255

返回的值也可以修改 例:exit 10  就是将他返回的值改成了10 ,以后返回的特定的值代表特定的内容

 

算术运算

bash中的算术运算 let

例: 赋值  a=10     b=20

let   c=a+b      或    c=$[a+b]       或 c=((a+b))

可以用 echo $c 查看结果

 

逻辑运算

&与并且and | 或者 or

0&0 =0 假与假 是假

0&1 =0 假与真 是假

1&0 =0 真与假 是假

1&1= 1 真与真 是真

 

0 | 0 = 0 假或假 是假

0 | 1 = 1 假或真 是真

1 | 0 = 1 真或 假 是真

1 | 1 = 1 真或真 是真

短路与 && 短路或 | |

0&&0 =0

0&&1 =0

1&&0 =0

1&&1= 1

chdm1 && chdm2 如果命令1为假 ,命令2 不需要执行 反之命令1为真,需要执行命令2

chdm1 | | chdm2 如果命令1为真,命令2不需要执行 反之命令1为假,命令2不需要执行

 

条件测试

test 判断表达式是否成立

 qwe=qqq

 asd=www

 test $qwe = $asd

 echo $?

判断变量qwe和asd变量的值是否相同,相同得0,不同的1到255

或   [  $qwe = $asd  ]

 

判断字符串的长度

[   -z   $var  ]   判断var的长度是不是为0,0就是没有存东西

[ -n $var ] 或 [ $var ] 判断var是不是非空,0代表非空里面有东西,其他代表空

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95957

(0)
周亚飞周亚飞
上一篇 2018-04-14 20:41
下一篇 2018-04-14 21:13

相关推荐

  • 软件包管理 rpm yum的使用

    软件包管理 链接主要作用是吧各个模块之间互相引用的部分处理好, 使得各个模块之间能够正确的链接,分为静态和动态 静态链接  以.a为后缀  把程序对应的依赖库复制到包           升级难 需重新编译  占用空间多 迁移容易 动态链接  以.so为后缀 把依赖加做动态链接    占用空间少  升级方便           若一个库被删,那么所有依赖此库…

    Linux笔记 2018-04-22
  • 08 tr命令练习

      tr命令 转换或删除字符 tr tr [OPTION]… SET1 [SET2]   -c 取反   -d 删除   -s 如果有重复字符,则代替为一个字符-压缩   -t 使set1长度和set2长度一致 示例1: tr set1 set2        将set1字符转换为set2要求的字符

    Linux笔记 2018-04-05
  • linux系统修复报错的方法 .

    如果/etc/fstab文件和boot目录下的文件丢失怎么办
    centos6启动流程

    2018-05-13
  • 课堂笔记

    cat— 文本文件 1.cat/etc/centos/—release看到发行版名称 lsb—releas—a                    看到发行版名称 (centors  7上如果看不到发行版名称,并不是没有,而是没有安装对映的软件,生产环境中都是最小化安装,默认安装是最小文件) 2.sz/etc/centos—release传到w…

    Linux笔记 2018-07-24
  • 第七周作业

      1、创建一个10G分区,并格式为ext4文件系统;  (1) 要求其block大小为2048, 预留空间百分比为2,   卷标为MYDATA, 默认挂载属性包含acl;  (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; 1.创建分区/dev/sdb1,容量为10G fdisk /dev/sdb…

    2018-05-02
  • lvs

    Linux笔记 2018-07-08