shell-编程

#Shell入门学习

shell简介

  1. shell是一个命令行解释器,它为用户提供一个向linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动、挂起、停止、甚至别写一些程序。
  2. 因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:1)进入到/tmp/目录;2)列出当前目录中所有的文件名;3)把所有当前的文件拷贝到/root/目录下;4)删除当前目录下所有的文件。简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。
    Shell脚本能帮助我们很方便的去管理服务器,因为我们可以指定一个任务计划定时去执行某一个shell脚本实现我们想要需求。

简单的说,shell脚本就是一些命令的集合

入门编程

下面进入正题,先从简单的开始来学习
第一步、我们需要创建一个脚本,就和创建一个文件一样,

1
vim filename

一般脚本文件名我们以.sh结尾,就相当于甲鱼的屁股。

然后当我们写好脚本最后,就可以直接执行可以赋予权限
一般使用两种执行方法
1.第一种先给写好的脚本附加权限即可直接执行(注意这里面是 + x)。

2.在脚本前面加 bash 或者 sh 也可以执行无需赋权限

3.一般我们在初次接触或者试写脚本的时候都会加一个 (- x) 这样不仅可以看到脚本执行的结果,还可以看到脚本脚本对应的命令是什么

4.date命令一般用于表现时间,

可以在后面加“+%Y%m%d %H%M%S” 不仅如此还可以在日期前面加日期 +%w 在此就不一一演示了

shell脚本中的变量

变量:是shell传递数据的一种方式,用来代表每个取值的符号名。使用变量是为了解决脚本臃肿问题,且使脚本变得更加灵活。

命名规范

  1. 变量名可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。
  2. 在bash中,变量的默认类型都是字符串型的,如果要进行数值运行,则必须制定变量类型为数值型
  3. 变量用等号连接值,等号左右两侧不能有空格
  4. 变量的值如果有空格吗,需要使用单引号或者双引号包括。

变量基本用法

  1. 使用反引号运行里面的命令,并把记过返回给Isvalue变量。从而可以通过Isvalue变量,来执行命令反引号里面的命令

  2. 同样的道理 反引号里面放的是命令, 当变量等于其他值,当把这个变量的值传给其他变量,这个所谓的其他变量一样拥有本身变量的值,而且变量是,可以进行拼接使用的,这个就不做演示了。

  3. 符号标识符

    • 命令连接符号 ; 可以一行打多条命令 用;分号连接
    • && 逻辑与 条件满足,才执行后面的语句
    • || 逻辑或,条件不满足,才执行后面的语句
      test “$name” == ”yangmi” && echo “&&后,命令正确执行我” || echo “||后,命令失败执行我咯”
      vim
  4. 单引号和双引号的区别:

    • 单引号是直接显示里面的所有内容,不做任何处理
    • 双引号是将引号里面的特殊字符进行处理执行后在显示出来。
    • 当双引号的加了\就等同于单引号的效果,不会做任何处理 “\ ”=’’
  5. $ 符号的用法(使用$符号就是需要在执行脚本时 在后面追加变量如(sh hello.sh 1 2))

    • $n 按第n个获取自己变量,从权限类型之后 包括脚本名称都可以获取, 按空格区分个数,但超过10且包括10的参数就需要使用大括号包含,如{${10} 注:$0一般表示为脚本名
    • $*代表该命令行中所有的命令,是把所有参数作为一个整体进行输出“$1 $2 $3 $4”
    • $@ 同样也是代表命令行的所有参数,但它是把所有参数逐个进行输出”$1” “$2” “$3” “$4”
    • $#可以记录有多少参数
    • $? 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定) 一般用于命令之后加 ;$?这样可以直接一行命令知晓命令是否正确运行
    • $$ 当前进程的进程号(PID),即当前脚本执行时生成的进程号
    • $! 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程

    $符号总结起来,作为变量名的话是一个标识,做一个表达式的前缀而言就是要处理$符号后面的表达式或者语句

  6. shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不再可用

  7. 输入参数,计算求和

  8. read 命令 可以直接一行read x 就可以做到让用户输入的效果,虽然x没有加$符号,但是那只是在获取变量值的情况下,在运算或者赋值给别人的时候,就需要加上$符号了, 可以写 read x

    read p 类似于echo的作用,也可以将上一句的输出和这一句的输入连在一起写,这样就不需要换行输入了

read [选项] 值 :
read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入)

  1. 其实变量和java很类似,你可以一开始就申明好变量,也可以在使用的时候直接$+变量名

  2. $()与${}的区别
    $( )的用途和反引号 ``一样,用来表示优先执行的命令
    ${ } 就是取变量了
    $((运算内容)) 适用于数值运算

Shell脚本中的判断逻辑

if判断

if 判断语句; then command fi
shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为:if [ -e filename ] ; then

case 命令

case命令是一个多分支的if/else命令,case变量的值用来匹配value1,value2,value3等等。匹配到后则执行跟在后面的命令直到遇到双分号为止(;;)case命令以esac作为终止符。
注:

  • )内的关键词就是脚本后面跟的$1 如果两者相等才会进入’echo’
  • * 代表除了以上其他的情况
  • ;;每一个case之前都要加;; 不能忘!

for 循环

除了我们下图看到:
一种方式:最原始的for循环方式
另一种方式:类似于增加for循环,

while循环

自定义函数

function 自定义函数名{

}

-------------本文结束感谢您的阅读-------------