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
下一篇 2018-04-14

相关推荐

  • 三、(1)常用文本查看及处理命令

    cat、cut、uniq、sort、grep、wc命令的使用方法

    2018-01-15
  • 构建一个mini linux系统

    mini linux: 启动流程: centos6:post》bootsequence(bios)》BootLoader(mbr)》kernel(如无法直接识别硬盘驱动,需借助ramdisk)》rootfs》/sbin/init centos7:post》bootsequence(bios)》BootLoader(mbr)》kernel(如无法直接识别硬盘驱…

    Linux笔记 2018-06-06
  • CentOS系统/boot/下的文件恢复

    如果不小心删除了/boot/下的所有文件,不知道恢复的具体步骤,请您看这里!

    2018-05-11
  • liunx 创建用户、文件权限及管理

      创建用户     修改和删除组 更改组密码 更改和查看组成员 文件权限:文件属性 文件属性操作 修改文件的属性和属组 文件权限   文件权限 八进制数字: 修改用户权限:   新建文件和目录的默认权限:               &n…

    Linux笔记 2018-04-08
  • 系统安装服务器搭建

    http服务器、dhcp服务器、tftp服务器

    2018-05-26
  • ansible的简介和用法

    Ansible  (底层是基于ssh连接的,每次操作其他主机需要输入密码 ,所以首先要实现基于key的公钥验证) 使用ansible: ansible "192.168.60.3" -m shell -a 'ls /root' -k (单个用户在实现基于key的验证前) 安装ansible: yum包的安装:…

    2018-05-28