自学内容网 自学内容网

Shell脚本的编写

第一个Shell脚本

新建一个文件test.sh,扩展名为sh,扩展名不影响脚本的执行,见名知意就好。 

#!/bin/bash   #shell脚本第一行通常是该语句,#!是一个约定的标记,告诉系统脚本需要什么解释器来执行
echo "Hello World !"

运行Shell脚本的方法

chmod +x ./test.sh    #是脚本具有执行权限
./tesh.sh    #执行脚本

Shell变量

#定义变量
your_name="Tom"    #变量的定义格式为 变量名=变量值,=两边不能有空格

#使用变量
echo ${your_name}    #使用变量需要加$,变量名外面的花括号可加可不加,{}是为了帮助解释器识别变量边界

#只读变量:只读变量的值不能够被改变
readonly your_name    #使用readonly将变量设置为只读

#删除变量
unset your_name    #使用unset 变量名可以删除变量,变量删除后不能再次使用,只读变量不能被删除

变量的类型有:字符串变量、整数变量、数组变量、环境变量、特殊变量

字符串变量:

注意:字符串的索引从0开始

str='this is a dog'    #单引号的字符串任何字符都会原样输出,单引号字符串中的变量是无效的
str="this is ${gog_name}"
str1="hello, "$your_name"!"    #可以使用双引号进行字符串的拼接

#获取字符串的长度
string="abcd"
echo ${#string}    #输出4

#提取子字符串
string="runoob is a great site"
echo ${string:1:4} #从第二个字符开始,截取4个字符,输出unoo

数组变量:

#数组变量
my_array=(1 2 3 4 5)

#关联数组(也称为哈希表或字典) 
declare -A associate_array
associate_array["name"]="John" 

#获取数组的长度
length=${#array_name[@]}
或
length=${#array_name[*]}

length=${#array_name[n]}    #获取第n个元素的长度

环境变量:由操作系统或用户设置的特殊环境变量,用于配置shell的行为和影响其执行环境

#常见的环境变量
HOME:用户的主目录
PATH:执行命令时要搜索的目录列表
PWD:当前工作目录

#设置环境变量
export MY_VARIABLE="my value"    #使用export设置为环境变量

#查看环境变量
printenv 或 env命令查看所有的环境变量

#修改环境变量
PATH="$PATH:/new/directory"
export PATH

#删除环境变量
unset MY_VARIABLE    #使用unset删除环境变量

 Shell传递参数

shell脚本内获取参数的格式为$n 表示第n个参数 

#!/bin/bash

function show(){
    echo "第一个参数为 $1"
    echo "第二个参数为 $2"
}

show 0 1

输出结果为:
第一个参数为0
第二个参数为1

Shell基本运算符

算术运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符

算术运算符:

原生的bash不支持简单的数学运算,但是可以通过expr命令来实现,能完成表达式的求值操作

[注] 运算符与表达式之间一定要加空格

#假定变量a为10,变量b为20
+ `expr $a + $b`
- `expr $a - $b`
* `expr $a \* $b`
/ `expr $b / $a`
= a=$b
== [$a == $b]
!= [$a != $b]

关系运算符:

 关系运算符只支持数字,不支持字符串

-eq    检测两个数是否相等    [$a -eq $b]
-ne    检测两个数是否不相等   [$a -ne $b]
-gt    检测左边的数是否大于右边的    [$a -gt $b]
-lt    检测左边的数是否小于右边的    [$a -lt $b]
-ge    检测左边的数是否大于等于右边的    [$a -ge $b]
-le    检测左边的数是否小于等于右边的    [$a -le $b]

布尔运算符:

!    非运算
-o    或运算
-a    与运算

逻辑运算符:

&&    逻辑的and
||    逻辑的or

 字符串运算符:

=    检测两个字符串是否相等
!=    检测两个字符串是否不相等
-z    检测字符串长度是否为0,为0返回true
-n    检测字符串长度是否不为0
$    检测字符串是否不为空,不为空返回true

文件测试运算符:

Shell流程控制

if else:

if []
then
    xxx
elif []
then
    xxx
else
    xxx
fi

for循环:

for var in item1 item2 item3 ... itemN
do
    command1
    command2
    ...
    commandN
done

#写成一行
for var in item1 item2 ... itemN; do command1 command2 ... done;

while语句:

until语句:

case ...  esac语句:

#实例
site="runoob" 
case "$site" in
    "runoob") echo "菜鸟教程"
    ;;
    "Google") echo "Google 搜索"
    ;;
    "taobao") echo "淘宝网"
    ;;
esac

跳出循环还是有break和continue两种方式

Shell函数

function funname [()]
{
    action;
    return int;
}

#function是可选的,可加可不加 return 也是可选的

Shell输入输出重定向

>    输出重定向
>>    追加输出重定向
<    输入重定向

Shell文件包含


原文地址:https://blog.csdn.net/qq_44807736/article/details/142787859

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!