Linux--Shell编程入门

  Shell是用户与Linux操作系统沟通的桥梁。Linux的Shell种类众多,这里我们学习的是bash,也就是Bourne Again Shell。因为他易用和免费,并且是大部分Linux默认的Shell。

定义

  1. shell脚本文件格式

    文件名后缀通常是.sh
    #!/bin/bash (同样还可以使用#!/bin/sh)
    #这里是注释

  2. 脚本执行的常用方式,比如mo.sh

    1、mo.sh(需有执行权限并且环境变量PATH中有(.))
    2、./mo.sh(只要保证这个脚本具有执行权限即可)
    3、/home/momo1/mo.sh(只要保证这个脚本具有执行权限即可)
    4、bash mo.sh(直接可以执行,甚至这个脚本文件中的第一行都可以不引入/bin/bash)
    5、bash -x /home/momo1/mo.sh #bash的单步执行
    6、bash -n /home/momo1/mo.sh #bash语法检查

变量

变量不需要声明,初始化不需要指定类型。分为,本地变量环境变量局部变量位置变量特殊变量变量赋值时“=”等号左右边不能有空格。

  • 变量命名
  1. 只能使用数字,字母和下划线,且不能以数字开头
  2. 变量名区分大小写
  3. 建议命令要通俗易懂

显示变量值: 使用echo命令,加上$变量名,也可以使用${变量名}
例如:echo $JAVA_HOME
或者echo ${JAVA_HOME}

本地变量

只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效,相当于java中的私有变量(private)。

1、定义:VAR_NAME=VALUE
2、变量引用:${VAR_NAME}|$VAR_NAME
3、取消变量:unset VAR_NAME

事例如下,定义一个变量,然后将它输出到控制台

环境变量

自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效。配置到配置文件/etc/profile中对所有shell进程都有效。

定义:export VAR_NAME=VALUE

![](https://img.xiaoxiaomo.com/blog%2Fimg%2F20160418200252.png)
  • 配置文件中环境变量(修改后记得source /ect/profile重启)
1
2
3
4
[momo1@momo1 ~]$ vim /etc/profile
# /etc/profile
# ......
export PATH=.:$PATH

局部变量

在函数中调用,函数执行结束,变量就会消失。对shell脚本中某代码片段有效。

定义:local VAR_NAME=VALUE

位置变量

用于接收 传递过来的参数。相当于java中main函数中的args参数。

定义:$0,$1,$2,…..${n}

  • 事例:定义shell脚本,内容如下:
1
2
3
4
#!/bin/bash
echo $0 #(脚本自己本身)
echo $1
echo $2

执行命令,并传入参数

1
2
3
4
5
6
7
8
9
10
11
12
[momo1@momo1 shell]$ ./site.sh xiaoxiaomo
./site.sh
xiaoxiaomo

[momo1@momo1 shell]$ ./site.sh xiaoxiaomo blog
./site.sh
xiaoxiaomo
blog
[momo1@momo1 shell]$ ./site.sh xiaoxiaomo blog com
./site.sh
xiaoxiaomo
blog

特殊变量

1、$?:接收上一条命令的返回状态码(状态码在0-255之间)
2、$#:参数个数
3、$*:或者$@:所有的参数
4、$$:获取当前shell的进程号(PID)(可以实现脚本自杀)(或者使用exit命令直接退出也可以使用exit [num])

![](https://img.xiaoxiaomo.com/blog%2Fimg%2F20160418222049.png)

符号

Shell中,符号分为:单引号、双引号、反引号

‘’单引号:不解析变量,echo ‘$xiaoxiaomo’
“”双引号:会解析变量,echo “$xiaoxiaomo”
``反引号:是执行并引用一个命令的执行结果,类似于$(…),echo `$xiaoxiaomo`

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器