Linux shell脚本

一、 #!/bin/bash 或 #!/bin/sh

#!告诉系统其后路径所指定的程序即是解析此脚本文件的Shell程序.

二、shell注释

# 注释一行
:<<EOF	EOF		多行注解
:<<!	!

三、echo "" 用于字符串输出

echo -e	"1\t2\t3" -e 包含转意字符

四、变量

>+ 只读变量	readonly name
>+ 删除变量	unset name
>+ 局部变量		局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
>+ 环境变量		所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量
>+ shell变量	shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

五、Shell字符串

str='' 
str=""
获取字符串的长度	${#name}
提取子字符串		${name:0:4}
查找子字符串		'expr index "$name" is'''为反引号)

六、shell数组

数组名=(值1 值2 值3...值n)
读取数组			${数组[下标]}
获取数组中的所有元素	${name[@]}
获取数组的长度		${#name[@]}${#name[*]}
获取数组单个值的长度	${#name[n]}

七、shell传递参数

$0    这个程式的执行名字
$n    这个程式的第n个参数值,n=1..9
$*     这个程式的所有参数,此选项参数可超过9个。
$#    这个程式的参数个数
$$     这个程式的PID(脚本运行的当前号)
$!     执行上一个背景指令的PID(后台运行的最后一个进程的号)
$?     执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$-     显示shell使用的当前选项,与set命令功能相同
$@$*类似,但是可以当作数组用

八、运算符

8.1 算数运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 \` 而不是单引号 '):
val=\`expr 2 + 2\`
echo "两数之和为 : $val"
\+	加法	\`expr $a + $b\` 结果为 30。
\-	减法	\`expr $a - $b\` 结果为 -10。
\*	乘法	\`expr $a \* $b\` 结果为  200。
/	除法	\`expr $b / $a\` 结果为 2。
%	取余	\`expr $b % $a` 结果为 0。
=	赋值	a=$b 将把变量 b 的值赋给 a。
==	相等。用于比较两个数字,相同则返回 true。	[ $a == $b ] 返回 false。
!=	不相等。用于比较两个数字,不相同则返回 true。	[ $a != $b ] 返回 true。

8.2 关系运算符

-eq	检测两个数是否相等,相等返回 true。	[ $a -eq $b ] 返回 false。
-ne	检测两个数是否不相等,不相等返回 true。	[ $a -ne $b ] 返回 true。
-gt	检测左边的数是否大于右边的,如果是,则返回 true。	[ $a -gt $b ] 返回 false。
-lt	检测左边的数是否小于右边的,如果是,则返回 true。	[ $a -lt $b ] 返回 true。
-ge	检测左边的数是否大于等于右边的,如果是,则返回 true。	[ $a -ge $b ] 返回 false。
-le	检测左边的数是否小于等于右边的,如果是,则返回 true。	[ $a -le $b ] 返回 true。

8.3 布尔运算符

!	非运算,表达式为 true 则返回 false,否则返回 true。	[ ! false ] 返回 true。
-o	或运算,有一个表达式为 true 则返回 true。	[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a	与运算,两个表达式都为 true 才返回 true。	[ $a -lt 20 -a $b -gt 100 ] 返回 false。

8.4 逻辑运算符

&&	逻辑的 AND	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||	逻辑的 OR	[[ $a -lt 100 || $b -gt 100 ]] 返回 true

8.5 字符串运算符

=	检测两个字符串是否相等,相等返回 true。	[ $a = $b ] 返回 false。
!=	检测两个字符串是否相等,不相等返回 true。	[ $a != $b ] 返回 true。
-z	检测字符串长度是否为0,为0返回 true。	[ -z $a ] 返回 false。
-n	检测字符串长度是否为0,不为0返回 true。	[ -n "$a" ] 返回 true。
str	检测字符串是否为空,不为空返回 true。	[ $a ] 返回 true。

8.6 文件测试运算符

-b file	检测文件是否是块设备文件,如果是,则返回 true。	[ -b $file ] 返回 false。
-c file	检测文件是否是字符设备文件,如果是,则返回 true。	[ -c $file ] 返回 false。
-d file	检测文件是否是目录,如果是,则返回 true。	[ -d $file ] 返回 false。
-f file	检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。	[ -f $file ] 返回 true。
-g file	检测文件是否设置了 SGID 位,如果是,则返回 true。	[ -g $file ] 返回 false。
-k file	检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。	[ -k $file ] 返回 false。
-p file	检测文件是否是有名管道,如果是,则返回 true。	[ -p $file ] 返回 false。
-u file	检测文件是否设置了 SUID 位,如果是,则返回 true。	[ -u $file ] 返回 false。
-r file	检测文件是否可读,如果是,则返回 true。	[ -r $file ] 返回 true。
-w file	检测文件是否可写,如果是,则返回 true。	[ -w $file ] 返回 true。
-x file	检测文件是否可执行,如果是,则返回 true。	[ -x $file ] 返回 true。
-s file	检测文件是否为空(文件大小是否大于0),不为空返回 true。	[ -s $file ] 返回 true。
-e file	检测文件(包括目录)是否存在,如果是,则返回 true。	[ -e $file ] 返回 true。

九、printf 用于输出字符串

printf	format-string	[arguments...]	
format-string:	为格式控制字符串
arguments:		为参数列表

十、test命令检查某个条件是否成立

10.1 数值测试 test $[num1] -eq $[num2]

-eq	等于则为真
-ne	不等于则为真
-gt	大于则为真
-ge	大于等于则为真
-lt	小于则为真
-le	小于等于则为真

10.2 字符串测试 test $num1 = $num2

>=	等于则为真
!=	不相等则为真
-z 字符串	字符串的长度为零则为真
-n 字符串	字符串的长度不为零则为真		

10.3 文件测试

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

十一、流程控制

11.1 if

if condition then
	    command1 
	    command2
	    ...
	    commandN 
	fi

11.2 if else

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi	

11.3 if else-if else

if condition1
	then
	    command1
	elif condition2 
	then 
	    command2
	else
	    commandN
	fi	

11.4 for 循环

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

11.5 while 语句

while condition
do
    command
done	

11.6 无限循环

while :
	do
	    command
	done	
	
	`或者`
	
while true
do
    command
done

	`或者`
	
for (( ; ; ))

11.7 until 循环

until condition
do
    command
done

11.8 case

casein
		模式1)
		    command1
		    command2
		    ...
		    commandN
		    ;;
		模式2)
		    command1
		    command2
		    ...
		    commandN
		    ;;
esac

11.9 跳出循环

break 		跳出所有循环(终止执行后面的所有循环)。
continue	跳出当前循环

十二、函数

[ function ] funname [()]

{

    action;

    [return int;]

}

十三、输入、输出重定向

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 之间的内容作为输入。

十四、文件包含(引用其他sh文件)

filename   # 注意点号(.)和文件名中间有一空格source filename
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值