Shell Script笔记

基本概念

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

变量

定义变量

定义变量时,变量名不加美元符号($),如:

your_name="nogos"

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

使用变量

your_name="nogos"
echo $your_name
echo ${your_name}

注意:加花括号是为了帮助解释器识别变量的边界,例如:

echo "I am good at ${skill}Script"

如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:

#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="http://www.runoob.com"

运行脚本,结果如下:

/bin/sh: NAME: This variable is read only.

删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量类型

  • 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量。
  • shell变量 shell变量是由shell程序设置的特殊变量。

Shell字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了)

定义

your_name='qinjx'
str="Hello, I know you are \"$your_name\"! \n"

注:字符串可以用单引号,也可以用双引号,推荐使用双引号。

拼接字符串

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

获取字符串长度

string="abcd"
echo ${#string} #输出 4

提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

截取字符串最后两个字符。

string="runoob is a great site"
echo ${var:0-2}#输出te

0-2表示:从右边第几个字符开始,一直到结束。

Shell数组

定义

array_name=(value0 value1 value2 value3)

读取数组

valuen=${array_name[n]}

数组长度

length=${#array_name[@]}
length=${#array_name[*]}

Shell注释

以”#”开头的行就是注释,会被解释器忽略。sh里没有多行注释。

Shell test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

示例

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

代码中的 [] 执行基本的算数运算,如:

#!/bin/bash

a=5
b=6

result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result" #结果为:result 为: 11

字符串测试

参数 说明
= 等于则为真
!= 不等于则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真

示例:

num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

文件测试

参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真

示例:

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

Shell 重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

Shell 函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
示例

#!/bin/bash

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

内容源自:
http://www.runoob.com/linux/linux-shell.html

猜你喜欢

转载自blog.csdn.net/sunxianghuang/article/details/80658458
今日推荐