shell脚本编程语言基础


一 脚本运行方式

#!/bin/bash 表示该脚本语言的解释器

两种运行脚本方式:

  1. bash filename 运行脚本文件
    还可以使用source filename来运行文件(主要是用于执行sh文件中的单个函数)尽量不要使用,因为更改了.bashrc、.bash_profile文件。

  2. chmod 将脚本变成可执行文件,添加到PATH路径中,直接输入文件名执行。

二 变量的定义和使用

脚本语言是弱类型的

a=12, 至于a是什么类型,要看后面是如何用的 (python不也是吗?)

2
shell编程中存在特殊的位置变量:

$0: 表示脚本文件的名称

$i:表示脚本文件的第i个参数

$*:表示即脚本文件的所有参数,所有的参数组成一个字符串

$@:同样是将脚本文件的所有参数,不过保留参数之间的空白

$#:求出脚本文件的参数个数,#有求长度和个数的意思

3

特殊的状态变量:

$?:shell脚本执行的状态,0表示执行成功,非零表示执行失败(联想C语言中main函数返回值为0)

$$:返回脚本对应线程的pid

$!:返回上一条指令的pid

4

变量与参数的展开,主要是当变量没有定义时,此时整个表达式的值应该是多少?

${var:-word} 当变量var未定义,此时表达式的值为word,变量var仍然处于未定义状态

${var:=word} 当变量var没定义时,此时将变量var的值赋成word,同时表达式的值为var

${var:+word} 当变量定义时,此时返回word

${var:?word} 捕捉因变量没有定义而造成的程序错误

${!var@} 表达式的值为var开头的变量

5

三 字符串相关操作

关于字符串的操作 很重要!!!!

6
7

四 输入输出操作

8
echo输出

echo -e "hello world\n" #若没有-e,就不会输出换行
name="dengruizhi"
echo "hello $name, this is China" 
echo "\"dengruizhi\"" #此时将会输出:"dengruizhi",若不加\,此时输出dengruizhi

9
还可以类似c语言中printf 输出

printf "hello %s, this is China\n" "dengruizhi" #将进行字符串的替换,同时换行

10

五 函数的声明以及使用

function _print_() {
	#do something, for example: echo $1
	return 
}
_print_ "dengruizhi"
#函数名后的参数列表,里面没有参数,只是形势
#此时函数将会echo输出dengruizhi

11

六 分支语句

if 语句:[[ condition ]] test表达式 ,可以man test手册打开

test表达式中:在判断string使用=、!=,对于整形的数据使用:equal greater less,还可以判断file文件

if [[ condition ]]; then
	#do something
elif [[ condition ]]; then
	#do something
	else
	#do something
fi

其中需要注意的是:if两层中括号后面加分号同时then,结束后不要忘记fi
12
同时对于判定语句,需要了解>,<, >=, <=, ==, !=, 还有与或非 这些基本表示关系的写法

了解字符串的等和不等关系,字符串的长度是否为0

对于整形数据,此时大小关系需要了解

对于文件数据,此时比较的是文件的新旧

这些忘记了都可以询问man手册, 输入man test即可

七 循环语句

for循环、while循环、until循环

在循环中有和C语言一样的continue、break、若想要退出sh文件的执行: exit

while [[ condition ]]; do
	#do something
done

for i in `seq 0 100`; do
	echo $i
done

until [[ condition ]]; do
	#do something
done

while
foruntil

八 数组的定义与操作

array1
array2
array3

#输出数组中的元素
for i in ${arr[@]}; do
	echo $i
done
#数组中一般常用自增操作
let i+=1
i=$[$i+1]
((i++))
#得到sh文件的绝对路径
filepath=$(readlink -f .) #$(readlink -f ..) 得到上上级目录的路径
echo $filepath

echo $RANDOM #产生随机数

#字符串的截取
str="aabbccssaaddssfg"
echo ${str:2:4} #表示从下标为2的字母开始,向后截取长度为4的字符串, bbcc
echo ${str:3} #若只有一个参数,表示从下标为3的字母开始,一直截取到最后, bbccssaaddssfg
echo ${str:(-2)} #注意截取的方向永远是从左到右,且只有一个参数的时候表达的永远是开始截取下标
#表示从倒数第2的元素开始,向后截取元素
#注意,若是两个参数,后面表示截取长度的值不可以为负数

#字符串的替换
str="aabbaaccddefgfe"
echo ${str/a/x} #表示将str从左到右,第一个字母a替换成为x, xabbaaccddefgfe
echo ${str//a/x} #表示将str从左到右,所有的字母a替换成x,xxbbxxccddefgfe

man bash可查看基本语法

man test 查看表达式关系大小比较

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值