shell脚本与指令

shell简介

shell种类

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)

使用cat /etc/shells查看当前系统可用的shell。其中,/bin/bash易用免费,因此常被用到。在脚本中的第一行开头使用#!指定使用什么种类,如果在终端执行的时候前面指定,则脚本中的无效。

1、shell变量

定义变量: 例如:a=123,b=“abc”

定义的变量可分为两类:局部变量环境变量
***局部变量***只在创建它们的shell中可用。
**环境变量全局变量,则可以在创建它们的shell用。有些变量是用户创建的,其他的则是专用shell变量。使用exportdeclare -x来声明并设置环境变量,使用printenv查看环境变量(只限制export设置环境变量的子shell能够引用,使用pstree来查看父子进程图)

使用变量: 变量前面跟$,例如:$a或者${a}
只读变量: 定义变量前面加readonly,只读变量是不能被改变的
删除变量: 将定义的变量删除unset

2、shell字符串

单引号字符串

单引号字符串:关闭转义功能,想要访问变量,必须使用单引号框起来,比如‘打印一个a变量 ‘$a’’

双引号字符串

双引号字符串:可以出现转义,访问变量可以双引号框起来,也可以使用大括号

字符串操作

${#string}:获取字符串的长度
${string:0:4}分割出0-4个字符(使用/bin/bash,不要使用/bin/sh)
$(expr index $string io)查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)注意:$()反引号作用一样

3、shell数组

数组定义 :数组名=(1 2 3 3 4)比如array=(”one“ ”two“ ”three“ ”four“)
${#array[*]} 或者 ${#array[@]}获取数组的所有元素的个数
${#array[0]} 获取第一个元素的大小

4、shell注释

# 表示单行注释
:>>EOF 注释内容 EOF 表示多行注释,其中EOF可以为其它字符

5、echo和printf用法

echo

格式:echo 字符串
1、echo abc:打印abc,省略双引号
2、echo ”zhangsan“ 带双引号打印,跟-e:表示开启转义。\c:表示不换行,\d:表示换行
3、echo $(指令)
4、echo ${变量}

printf

格式:printf ” %s %d %c %f“ 字符串 整形 字符 浮点型
%s %c %d %f 都是格式替代符,%s输出一个字符串,%d整型输出,%c 输出一个字符,%f输出实数,以小数形式输出。
实例:
1、%-8s 指一个宽度为 8个字符(-表示左对齐,没有则表示右对齐)
2、%-4.2f中的.后面的指浮点型的位数

6、运算符

算数运算符

expr指令:val= ( e x p r 1 + 1 ) 、 v a l = (expr 1 + 1) 、 val= (expr1+1)val=(expr 1 \* 1 ) 运算符和数字中间需要使用空格隔开,其中*需要使用\转义 ,其它不需要转义
let指令:let val=1+1 、let val++ 运算符和数字中间不能使用空格隔开,效率更高

关系运算符

-eq ==等于 、-gt 大于、-lt小于、 -ge 大于等于、 -le 小于等于、 -ne !=不等于
不支持字符串

布尔运算符

-a与 、-o或 、! 非 。 如果使用[]、test,都使用单个

逻辑运算符

&& 逻辑与 、|| 逻辑或 。如果使用[]、test,都使用双个

字符串运算符

=等于 、 !=不等于 、 -z0长度字符串为true 、 -n不为0长度字符为true、$string判断字符串是否为空,不为空返回真

文件测试运算符
-e 判断文件或者目录是否存在,存在则为真
-s 判断文件是否为空,不为空则为真
-r 判断文件是否可读,可读则为真
-w 判断文件是否可写,可读则为写
-x 判断文件是否可执行,可读则为执行
-u 判断文件是否设置了UGID 位,是则为真
-g 判断文件是否设置了SGID 位,是则为真
-k 判断文件是否设置了粘着位,是则为真
-p 判断文件是否为有名管道文件,是则为真
-b 判断文件是否为块设备文件,是则为真
-c 判断文件是否为字符设备文件,是则为真
-d 判断文件是否为目录文件,是则为真
-f 判断文件是否为普通文件,是则为真

7、shell流程控制

if条件选择

if 条件(使用[]或者test进行判断)
then
内容
elif 条件
then
内容
else
fi

case条件选择

casein
)
内容;;
)
内容;;
esac

for循环

for val in value0 value1 value2 ...
do
内容
done

while循环

while 条件
do
内容
done

until循环

until 条件
do
内容
done

无限循环

for((;;)) 或者 while true 或者 while :
do
内容
done

使用break可以跳出循环,使用continue可以跳过这一轮循环

8、shell传递参数

$0:脚本的名字
$1,$2,$3...:脚本传递的第1,2,3参数
$#:传递参数的个数
$*:所有传递参数,聚合在一起的字符串
$@:所有传递参数,分开的字符串
$$:当前进程ID
$?:后台运行的最后一个进程id
$!:上一个执行退出的状态,可以是函数、指令等
$- 显示Shell使用的当前选项,与set命令功能相同。
read val:将终端脚本后面的参数读入并赋值给val

9、shell函数

函数格式: function 函数名() { 内容(使用参数同上$#$*$$$?$!) }
函数调用:函数名 函数参数

10、shell之间文件包含

.source 包含其它shell文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值