Linux中Shell脚本教程学习

Shell编程简介

Shell编程只需要一个能编写代码的文本编辑器和一个能解释执行的脚本解释器即可。
Linux的shell种类很多,主要学习Bash(Bourne Again Shell)

Bourne Shell (/usr/bin/sh 或 /bin/sh)
Bourne Again Shell (/bin/bash)
C Shell (/usr/bin/csh)

首先在Linux中通过vim创建一个test.sh文件,这里的扩展名sh代表shell,可任意写,不影响脚本执行。
通过vim/vi的方式创建文件test.sh

#!/bin/bash
echo "Hello World!"

其中 #! 是一个约定标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种shell。
echo命令用于向窗口输出文本。

运行Shell脚本
Shell脚本运行可以有两种方式:

  1. 作为可执行程序(脚本第一行需要写#!指定解释器)
    chmod修改脚本权限 之后执行脚本
    chmod 777 ./test.sh 表示给文件test.sh读写及可执行权限
    chmod +x ./test.sh 表示将文件改为可执行状态
    Linux文件的权限一般分为 读r:4 写w:2 可执行x:1 无权限-,若赋予某文件权限为 r-x ,即4+1=5

  2. 作为解释器参数(直接运行解释器,脚本第一行不需要指定解释信息)
    直接运行解释器

一、Shell变量

  1. 定义变量
your_name="zhang" 

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

  1. 使用变量
    使用变量时在变量名前加符号 $ 即可,变量名外可加花括号以便区别。
    echo ${your_name}

  2. 只读变量
    在变量名前使用readonly可以将变量定义为只读变量,只读变量的值不能被改变

#!/bin/bash
your_name="zhang"
readonly your_name
echo ${your_name}
  1. 删除变量
    使用unset命令可以删除变量,但不能删除只读变量
unset your_name

二、Shell字符串

字符串可以用单引号、双引号,或不用引号

  1. 单引号
    单引号字符中的任何字符都会原样输出,单引号字符串中的变量无效
  2. 双引号
    双引号字符串里可以有变量,可以出现转义字符\
  3. 拼接字符串
    在这里插入图片描述
  4. 获取字符串长度
    在变量名前加 #
str="runoob"
echo ${#str}

输出结果为 6

  1. 提取子字符串
    获取字符串中索引值为1到3的字符
your_name="zhang"
echo ${your_name:1:3}

输出结果为 han

  1. 查找子字符串
    查找字符i或o的位置(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io` #输出4

注意:这里代码中的 ` 是反引号,位于ESC键下面

三、Shell数组

支持一维数组,不支持多维数组,且不限定数组大小。数组元素下标从0开始,获取数组中元素要利用下标。

  1. 定义数组
    定义数组用圆括号将数组元素括起,每个数组元素以空格分隔
arr1=("aa" "bb") 

可以单独定义数组的各个分量,此时可以使用不连续的坐标,且下标的范围没有限制

arr1=("aa" "bb")
arr1[3]="cc"
  1. 读取数组
    读取数组元素的格式为 ${数组名[下标]}
    下标使用 @ 或者 * 可以读取数组全部元素
arr1=("aa" "bb")
arr1[3]="cc"
echo ${arr1[0]} #输出 aa
echo ${arr1[2]} #不会有输出,因为下标2没有元素值
echo ${arr1[3]} #输出 cc
echo ${arr1[@]} #输出 aa bb cc
echo ${arr1[*]} #输出 aa bb cc
  1. 获取数组的长度
length=${#arr1[@]} #取得数组长度
length=${#arr1[*]} #取得数组长度
length=${#arr1[1]} #取得数组下标为1的元素的长度

四、Shell注释

# 开头即为注释
多行注释可通过以下方式

:<<EOF
注释内容
...
EOF

EOF可以用其他符号代替

:<<!
注释内容
!

五、Shell传递参数

执行Shell脚本时传入参数 ,脚本中获取一般参数的格式为 $n ,n为数字,1代表第一个参数,2代表第二个参数…
0代表执行的脚本的文件名

#!/bin/bash
echo "file name $0"
echo "first: $1"
echo "second $2"

执行脚本

./test2.sh fir sec

则输出为
在这里插入图片描述
在这里插入图片描述

六、Shell基本运算符

Shell运算符主要分为 算术运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。

  1. 算术运算符
    注意 ①表达式和运算符之间要有空格 ,如 $a + $b 而不能写成 a + a+ a+b
    ②表达式要用反引号包含,在ESC键下边
#!/bin/bash
a=10
b=20
res=`expr $a - $b`
echo ${res}

res=`expr $a + $b`
echo ${res}

res=`expr $a \* $b` # *前需要加转义符
echo ${res}

res=`expr $b / $a`
echo ${res}

res=`expr $b % $a` 
echo ${res}   

if [ $a == $b ] 
then echo "a=b" 
fi 

if [ $a != $b ] 
then echo "a!=b" 
fi                                                                                                                                                                         
  1. 关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值为数字在这里插入图片描述
  2. 布尔运算符
    在这里插入图片描述
  3. 逻辑运算符
    在这里插入图片描述
  4. 字符串运算符
    在这里插入图片描述
  5. 文件测试运算符
    在这里插入图片描述

七、Shell echo命令

echo命令可以用于字符串、变量的输出等。echo命令输出会自动换行

  1. 字符串输出
echo "This is a string"
  1. 输出变量
var="this is var"
echo ${var} #输出 this is var
  1. 显示转义符
echo -e "OK! \n" # -e开启转义
echo -e "ok! \c" # \c为不换行转义符
  1. 显示结果定向至文件
#!/bin/bash
#test.sh
echo "write this from test.sh to myfile.sh" > myfile.sh 
#执行test.sh文件,则myfile.sh中将会出现上述字符串
  1. 原样显示字符串或不取变量的值,用单引号
echo\sss${var}#输出结果为 \sss${var}
  1. 显示某一命令执行的结果
echo `date` #这里使用的是反引号,输出结果为当前日期

八、Shell printf 命令

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值