Linux Shell脚本系列之二

Linux 2017-07-30

shell是干嘛用的?

shell是一脚本语言,没有编译过程,不像Java等其他编程语言一样复杂,它面向的对象应该是服务器,为了运维人员方便管理服务器而去实现某些操作。而不是说用shell去写一个app,它没这个能耐。

shell变量

  • 变量是任何一门编程语言不可少的组成部分,它用于存储数据。
  • 通常脚本语言不需要声明变量的类型,直接赋值就可以了。
  • 而在Bash中,变量的默认赋值都是一个字符串,无论你赋值的时候有没有加上引号,它都是当作字符串去存储。
  • 变量名不能以数字开头,可以由数字字母下划线组成。

变量的分类

  • 用户自定义的变量
    变量名=变量值(给变量赋值时,不要有空格,不然系统会一个你是在输入命名,所以会报命令找不到的错误)
    $变量名或${变量名}:调用变量值
    set:查看当前已定义的变量
    set -u:可以知道调用变量值时可以知道该变量是为空还是未定义
    unset:用于删除变量
    sum=$var+$x按道理应该输出10,结果输出的是5+5,这是因为变量赋值都当作是字符串,所以下面才有sum=$var$x输出55

举个栗子1

  • 系统环境变量:主要保存和系统操作环境相关的数据,可自定义,但真正对系统生效的变量和作用是固定的。
    环境变量和用户自定义变量的区别,环境变量是全局变量,用户自定义变量是局部变量
    定义环境变量:
    export 变量名=变量值 (声明并赋值)
    变量名=变量值
    export 变量名 (先赋值后声明)
    env:只查看环境变量用命令
    $PATH:系统查找命令的路径
    其实我们平时使用的命令,按道理都是需要打路径下的可执行文件去执行的,但我们都不会这样去使用。
    比如说ls命令,按道理应该是/bin/ls可是我们只是使用ls就成功运行了该文件,为什么呢?
    这是因为环境变量$PATH的作用,当我们打出ls时,它会在$PATH里头存储的路径下去找对应的可执行文件
    那么按照这个思路,我们可以把存放自己写的脚本那个文件目录放到$PATH里头,那么我们就可以很轻松的去调用了

举个栗子2
locale:查询当前系统的语系
LANG:定义系统主语系的变量,修改该值只是临时生效
/etc/sysconfig/i18n:修改这个文件重启服务器后永久生效

  • 预定义变量:变量名和该变量对于的作用都是固定的,不可自定义,位置参数变量也是预定义变量的一种
    1.位置参数变量
    $n:n为数字,$0代表命令本身,$1-$9代表1到9的参数列表,大于或等于10的用用花括号包起来{$10}
    $*:代表命令行中的所有参数,把所有参数看作一个整体
    $@:代表命令行中的所有参数,把每个参数区分看待
    $#:代表命令行中的所有参数个数

利用位置参数变量写一个求和脚本
求和可以使用let命令,如let sum=var1+var2
也可以使用(()),如sum=$((var1+var2)) 或 $(($var1+$var2))
使用操作符[]也可以这样sum=$[$var1+var2]

  • $*$@的区别
    $*被扩展为$1c$2c$3等,其中c为IFS的第一个字符
    $@被扩展为$1 $2 $3

举个栗子4
$*看成一个整体,所以只循环了一次。$@把每个参数区分看待,所以循环了4次
2.预定义变量
$?:最后一次执行命令的返回状态,0为正确执行,非0为错误执行
$$:当前进程的进程号 (PID)
$!:后台运行的最后一个进程的进程号

read变量:接收键盘输入

  • -p:提示信息,等待输入时的提示信息
  • -t:指导等待输入时间
  • -n:指定接收的字符长度
  • -s:隐藏输入内容,适用于密码输入之类,比如我们输入登录密码,输入时你是看不到你输入了什么

举个栗子5


本文由 阿涛 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论