【Shell脚本(一)】基础

介绍

Shell有两层意思,一指就是Shell,一个用C语言编写的程序,由其提供一个可视的界面,用户通过输入相应的命令来与操作系统内核进行交互。

另指Shell脚本(业界所说的shell通常是指shell脚本),一种用shell编写的程序,笔者随后所记录的也是有关Shell脚本的知识。

同样,Shell编程指的是编写shell脚本,而非开发Shell自身。

运行环境

一个文本编辑器,一个解释器。

Shell的解释器有许多种,本文所使用的是常见的BashBourne Again Shell

BashLinux系统默认的解释器,是基于SHBourne Shell而来,SHUnix默认的解释器,在所有Unix操作系统上都可以使用。在实际使用过程中,不需要过于重视区分二者的区别,所以无论用二者中哪一个解释器,文件名后缀都可以是.sh

Shell脚本运行方式

同其他PythonPHP类似。

/bin/bash  xx.sh

作为解释器参数,/bin/bash Bash所在路径,xx.sh为文件名。

chmod  +x  ./xx.sh 
./xx.sh

作为程序执行,为xx.sh添加执行权限(./表示xx.sh在当前目录下)。执行xx.sh

注释:xx.sh文件通常以#!/bin/bash开头,#告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序,如果采用第一种运行方式,那么此行可以不写,写了也无效,采用第二种运行方式,需要加上此行。注意命令大小写。

变量

变量命名:1字母;2下划线;3不可使用bash里的关键字。

First_Name=”Hello world!”

变量使用1$2{}3括号可以省略但是尽量加上避免与非变量混淆。

echo ${First_Name}

只读变量1,readonly

readonly First_Name

删除变量1,unset;2,删除后不可用。

unset First_Name

运行shell时,会同时存在三种变量

1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。

字符串

引号1,单引号:字符原样输出,变量无效。

First_Name='Hello world!'
echo 'echo ${First_Name}'

2,双引号:变量有效,可以使用转义符。

echo "echo ${First_Name}"

获取长度:1#

echo "length: ${#First_Name}"

提取字符串:1,第一个字母为0号位置

echo "split: ${First_Name:6:11}"

查找字符串:1,‘r’为查找的字符;2外侧不是单引号而是反引号(tab键上方)

echo `expr index "${First_Name}" r`

数组

数组的区别不大:1,外部为括号;2,不需要确定大小;3,不需要逗号分隔

#!/bin/bash
array=(
Tom
Jerry
Jack
Jhon
)
echo ${array[1]}

获取数组与数组元素长度:

echo "All Length:${#array[*]}"
echo "Single Length:${#array[1]}"

字符串截取(重)

来自某网友的总结,已经很详尽了。

          


参数传递

如果我们想使用echo输出一个后期输入的参数。

echo "$1"

执行文件:(03.sh为脚本名,A为参数名)

sudo  ./03.sh  A

输出A

同理如果将$1改成$2,参数传递应该改为sudo  ./03.sh  A  B

输出B

(只给与一个参数A,则什么也不显示)

由此可知,传递$n,则为文件名后第n个参数

$0:代表当前执行的文件

$#:代表参数的个数

#!/bin/bash
echo "$0"
echo "$1"
echo "$2"
echo "$3"
echo "$#"

另外,还有几个特殊字符用来处理参数:



#!/bin/bash
echo "$0"
echo "$1"
echo "$2"
echo "$3"
echo "$#"
echo "$*"
echo "$@"
echo "$$"
echo "$-"
echo "$?"

"$*"和 "$@"的区别

"$*"得到的是一个所有参数的字符串“ABC”

"$@"得到的是一个所有参数的数组“A”“B”“C

#!/bin/bash
echo "$1"
echo "$2"
echo "$3"
echo "$*"
echo "$@"
echo "-- \$* ---"
for i in "$*"; do
    echo $i
done
echo "-- \$@---"
for i in "$@"; do
    echo $i
done




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值