shell快速编程入门

环境

linux

1
默认自带shell解析器

windows

1
windows平台想要玩要借助cygwin模拟liux环境,win10开启支持bash功能也可以玩

macos

1
开发笔记本啥环境都有

告知解释器用哪一种shell

1
#!/bin/bash

示例:

#!/bin/bash
echo "hello world"

执行方法

可执行文件程序方法

chmod +x ./test.sh
./test.sh

可以作为解释器shell的参数运行

1
sh test.sh # 这种方式不需要在文件头指定解释器#!/bin/bash,这种方式不推荐使用。
1
php test.php # 类似php文件用php命令执行

shell 变量

变量类型

局部变量

局部变量定义在当前脚本中,只对当前脚本生效。

环境变量

所有shell脚本都可以访问这个变量。

shell变量

这种变量包含局部和环境变量,是一个集合。

特殊变量

比较常用
$0: 表示当前脚本名字
$#: 传入脚本的参数个数
$?: 表示上一个命令执行后的返回值,执行成功返回0,反之为其他,一般用于if判断里面
$$: 表示当前shell的进程pid

显式变量并赋值

格式,如:
name    =    "jeff"
 ↓        ↓        ↓
变量名    赋值符       值

注意:
1. 变量名以字母开头,以数字等特殊字符要报错;
2. 中间不能有空格,和python不同;
3. 和其他语言一样,不能用bash自带的关键字;

语句变量并赋值

1
for file in `ls /data/www/html/v6/` # 将v6目录循环出来

使用变量

name="jeff"
echo "我的英文名字是:${name}" # 使用变量最好是用${xxx}方式更好的帮助解释器识别变量,echo 可以加-n 不在最后自动换行-e 打开反斜杠转义

只读变量

name="jeff"
readonly name
name="test" # 当变量声明为只读变量时再次给他赋值就会报"This variable is read only."
echo "我的英文名字是:${name}"

删除变量

name="jeff"
unset name # 和只读变量句式差不多
echo "我的英文名字是:${name}"

重新定义或赋值变量

name="jeff"
echo "我的英文名字是:${name}"

name="test" # 这里不能用${name}来赋值,用$表示使用这个变量
echo "我的英文名字是:${name}"

数据类型

感觉shell除了字符串和数字类型貌似也没啥类型,可能是我用得比较少。

字符串类型string

单双引号的区别

字符串最好是用双引号引入;
单引号是你输入啥就显示啥,也就是原样;
双引号不仅输出原样还可以输出变量的值;
双引号可以转义字符;

常用转义字符表

转义字符 意义 备注
\n 换行 x
\r 回车 x
\t 一个TAB键的位置 x
\ 转义”\”,代表一个反斜线字符 x
\’ 代表转义一个单引号字符 x
\” 代表转义一个双引号字符 x
\? 代表转义一个问号字符 x

拼接字符串

name="jeff"
age="18"
echo "我的名字是${name}, 今天${age}岁啦。"
echo "hi, 恭喜你${name},今天${age}岁啦。举高高!"

获取字符串的长度

name="jeff"
echo "${name}字符串的长度为: ${#name}"

提取字符串内容

name = "jeff is a good name"
echo "name is ${name:0:3}" # 下标从0开始,大部分语言都是从0开始,从第0个字符开始截取3个字符。

传递参数

可以给脚本传递参数,获取参数的格式为$n,n代表数字,如$1表示脚本传递的第一个参数;
也可以用上面说的特殊字符变量来处理参数,$?表示上一个命令执行的返回值;
示例:

#!/bin/bash
# author:jeff
# url:tanjiangfu.github.io
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
echo "参数个数为:$#"
echo "传递的参数作为一个字符串显示:$*"

chmod +x test.sh
./test.sh 1 2 3

数组

shell只支持一维数组数组可以存放多个值;
元素的下标从0开始,不是从1开始;

数组用括号来表示,元素用空格符号区分割

格式:
array_name=(val1 val2 val3)

Jeff wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
码字不易,坚持原创技术分享,您的支持将鼓励我继续创作!么么哒!