Shell 脚本学习笔记-基础

Shell 脚本学习笔记-基础

杂记

bash 中,默认数据类型都为字符串。


expr 可以用来判断输入或变量内容是否是数字。expr $num + 1 如果报错,则不是数字,否则就是数字。

expr $num + 1 &> /dev/null
[ $? -ne 0 ] && {
  echo "not number"
  exit 1
}

常用符号及含义

符号含义
""使 shell 将双引号中的空格、制表符等大多数的特殊字符按普通字符处理。但是有三种特殊字符依然有特殊含义,分别是 &、\和 `
''(单引号)使 shell 将双引号中得所有字符按普通字符处理
``(反引号)$()作用是把命令的运行输出作为值返回给当前 shell。 eg:a=`ls -a`. `ls -a` 的结果会赋值给a
\(反斜杠)转义字符(逃脱字符)使其后的特殊符号作为普通字符处理
;如果要一行写多个命令,命令之间需要用“;”隔开
;;case 语句中用于表示中断(break)
{}创建命令块
|(竖杠)管道标识符。command1 | command2 表示将 command1 的结果作为 command2 的参数。eg: ls -a | grep "filter"
$?返回上一个命令的运行结果(程序返回值)echo $?
()在子 SHELL 中执行命令。子 SHELL 特点如下:不会阻塞当前任务(可以用来作并发),结束后自动销毁对应环境;子 SHELL 可以访问父 SHELL 的变量和环境变量(继承,因此不能修改父 SHELL 中变量),父 SHELL 不能访问子 SHELL 内部变量;
$@获取所有参数形成一个集合,可以使用 forin 进行遍历
$*将所有参数拼成一个字符串返回
$#获取输入参数的数量

字符串处理

详见《SHELL 字符串处理》

条件判断

  • [ ][[ ]] 的区别在于在 [[ ]] 中的逻辑判断可以直接使用 ||、&&*。同时 [[]] 过于强大不好掌握
  • [] 这种形式是 test 命令的变形,也可以写成 if test a -nq b,等价于 if [ a -nq b ]
  • 除了 [],字符串处理 ${} 也包含逻辑处理参数。例如,给变量提供默认值。详见《SHELL 字符串处理》
符号含义
字符串比较
str1 = str2判断两个字符串是否相等
str1 != str2两个字符串不等时为真
-n str1str1长度大于0时为真
-z str1str1长度为0时为真
数值比较
int1 -eq int2相等为真
int1 -ne int2不相等为真
int1 -gt int2int1 > int2 为真(great than)
int1 -ge int2int1 >= int2 为真(great or equal)
int1 -lt int2int1 < int2 为真(less than)
int1 -le int2int1 <= int2 为真(less or equal)
文件判断
-e file文件存在为真(exist)
-d file文件存在并且是一个目录为真(dictionary)
-r file文件存在并且可读为真(readable)
-w file文件存在并且可写为真(writable)
-x file文件存在并且可执行为真(executable)
file1 -nt file2file1比file2新为真(new than)
file1 -ot file2file1比file2旧为真(older than)
file1 -ef file2file1和file2是同一个文件为真(equal file)
express1 -a express2两个表达式同为真则为真(and)(&&)
express1 -o express2至少有一个真则为真(or)(||)
更多资料

流程控制

if

if [ logic1 ];then
	//someting to do
elif [ logic2 ]
	//someting to do
else
	//someting to do
fi

for

# 1.
for arg in aSet;do
	//something to do
done
# 2.
for (( i=start; i<end; i++ ));do
	//something to do
done

while

while [ logic ];do
	//something to do
done

case

case word in
	pattern1 )
		//something to do
		;;
	pattern2 )
		//something to do
		;;
	* )
		//something to do
		;;
esac

在case语句中 pattern 如果表示为 [Yy] 表示如果 word 为 Y 或者 y 则进入这个 case,即单字符匹配

Tips:
如果在执行过程中需要以新的参数重新运行脚本,可以使用“$0 param”的方式

函数

shell 自定义函数可以看成自定义了一个新的命令,这个命令的作用范围为定义开始至脚本结束。
所以运行函数的时候可以像命令一样传入参数:Function param1 param2 …
对于参数的处理可以使用 $1,$2,$@ 等获取参数和参数相关信息。

格式:

[function] name()
{
	# body
}

参数

对于参数的处理可以使用 $1,$2,$@等获取参数和参数相关信息。

关键词

关键词含义
return value返回函数的运行状态。非必需
local var=something标志“var”为局部变量。仅可在函数内部使用
echo函数中返回值到运行该函数的位置

返回值

脚本中使用 exit <value> 可以退出当前脚本(或者等执行完自动结束),在函数中可以使用 return <value> 方式结束一个函数(或者函数执行完自动结束),“return value”来返回函数的执行状态,返回的“value”可以通过 $? 来获取。“value”的范围为:0-255

#!/bin/sh
testFunc()
{
	echo "112233"
	return 200
}

case $1 in
	"--start" )
		result=$(testFunc);
		echo "returnCode=$?"
		echo "result=$result"
		;;
	* )
		echo "param error"
		;;
esac

# 结果输出:
# returnCode=200
# result=112233

调用其他 shell 脚本中的函数

详见《执行 SHELL 脚本的几种方式》

注意:当引入的脚本中有同名函数时,后引入的会覆盖先引入的

SHELL 中常见的算术运算命令

运算操作符与运算命令意义Demo
(())用于整数运算的常用运算符,效率高((i=i+1)),aa=$((i+1)),echo $((2+1)),((8>7&&5==5))
let用于整数运算,类似于 (())let num=num+1
expr可用于整数运算,除此之外还有其他功能expr 3 + 5
bcLinux 下的一个计算器程序(适合整数及小数运算)
$[]用于整数运算
awk既可以用于整数运算,也可以用于小数运算
declare定义变量值和属性。-i 参数可以用于定义整形变量,做运算
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值