Shell编程学习(1)

1 基本概念

shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。我们所说的shell编程是指shell脚本编程,而不是开发shell程序。

2 shell环境

Bash 也是大多数Linux 系统默认的 Shell。在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

3 运行shell脚本

  1. 作为可执行程序
    chmod +x ./test.sh #使脚本具有执行权限
    ./test.sh #执行脚本
  2. 作为解释器参数运行
    /bin/sh test.sh
    /bin/php test.php
    这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

4 Shell变量

4.1 变量命名

和其他语言没什么区别

4.2 变量赋值

变量名和等号之间不能有空格

4.3 使用变量

变量前面要加美元符号。
your_name=“qinjx”
echo $your_name
echo ${your_name}
花括号是可选的

4.4 只读变量

变量前加readonly

4.5 删除变量

变量前加unset,注意unset不能用于只读变量

4.6 变量类型

全局变量(环境变量):在Linux中,内置了一些环境变量,如HOME,PATH,SHELL,UID,GID,HOSTNAME等,可以通过命令env显示所有的环境变量。
局部变量(普通变量):在脚本中自定义的

5 Shell字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

5.1 单引号

  • 单引号中所有的字符都是原样的输出,也就是说单引号中的变量是无效的。
  • 单引号中无能再出现单引号了,对转移符也无效

5.2 双引号

双引号中可以有变量
可以使用转移符

5.3 字符串拼接

your_name="qinjx"
# 不同于java不用+号连接,直接字符串拼接
greeting="hello, "$your_name" !"  
greeting_1="hello, ${your_name} !"

5.4 获取字符串的长度

string=“abcd”
echo ${#string} #输出 4

5.5 提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:
string=“runoob is a great site”
echo ${string:1:4} # 输出 unoo

5.6 查找子字符串

查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):

string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。

6 Shell数组(基础)

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

6.1 定义数组

在 Shell 中,用小括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
array_name=(value0 value1 value2 value3)

6.2 访问数组

${数组名[下标]}

  1. 获取单个数组
    echo ${array_name[n]}
  2. 获取所有数组
    echo ${array_name[@]}

6.3 获取数组的长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

7 Shell注释

7.1 单行注释

以 # 开头的行就是注释,会被解释器忽略。
通过每一行加一个 # 号设置多行注释

7.2 多行注释

:<<EOF
注释内容...
注释内容...
注释内容...
EOF
或者
:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

8 向Shell脚本传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
举个例子:
shell脚本内容:

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

bash命令行:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

几个特殊字符的传递参数:

$#	传递到脚本的参数个数
$*	以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。
$$	脚本运行的当前进程ID号
$!	后台运行的最后一个进程的ID号
$@$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。
$-	显示Shell使用的当前选项,与set命令功能相同。
$?	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$*$@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值