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

相关推荐

  • linux基础知识

    第一周基础知识作业

    2018-05-10
  • 文本处理工具sed

    sed:是行编辑器是一款流编辑器,是一门语言,;比grep强大,不光能看还能改,你值得拥有。地址定界:对第几行进行操作不给地址:对全文处理单地址#指定的行,$最后一行/字符,正则/:被此处模式匹配到的每一行地址范围:#,#:第几行到第几行#,+#:从第#行往后加#行(包括#,)/a字符串/,/b字符串/:从a匹配到b(如果找不到b就会从a打印到最后一行)#,…

    2018-04-19
  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。cp -r /etc/skel/ /home/tuser1chmod -R go= /home/tuser1 2、编辑/etc/group文件,添加组hadoop。vi /etc/groupG 跳到最后一行o 进入输入模式添加…

    Linux笔记 2018-05-30
  • shell脚本进阶—课堂总结

    循环、函数、会持续更新

    2018-05-10
  • 随堂笔记2

    记马哥Linux运维课程第二周知识点(持续更新中)   bin目录 存放二进制数据 给普通用户执行的 在Centos7上 绿色的为… 并不是真正的文件夹 而是快捷方式 bin->usr/bin 内容放在一起 ;在6上,这两者并不是同一个目录,分开放 sbin 给管理员执行的二进制程序 media mnt(mount) 充当外围设备…

    Linux笔记 2018-07-29
  • N31第五周

    1、简述rpm与yum命令的常见选项,并举例 一.rpm包管理 CentOS系统上使用rpm命令管理程序包:安装、卸载、升级、查询、校验、数据库维护安装 (1)安装[install-options] rpm {-i | –install} [install-options] PACKAGE_FILE … -h:使用”#&…

    Linux笔记 2018-07-30