shell脚本笔记

分类:Code,node 日期:2020-11-01 作者:admin 浏览:169

简介

C语言编写的程序,用于与内核通信

常见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)

起始与结束

文件开头,用于指出使用的shell

#!/bin/bash

该语句为第一行首行,之后是脚本!

最后使用 .sh 保存,执行时先要 chmod +x ./脚本,然后执行./文件名.sh

语法

变量

命名规则基本与其他语言相似

variable="bianliang" # =两边不能有空格,赋值不加$
echo $variable
echo ${variable}  #可加可不加 `{}` ,推荐加

只读变量: readonly variable

删除变量: unset variable

数据类型

字符串

variable="字符串9527"

使用单引号或者双引号都可以,推荐双引号

获取字符串长度: echo ${#variable}

截图字符串(从第二个截取到第四个): ${variable:1:4}

查找字符串:

`expr index "$variable" 查找的字符串

数组

  • 支持一维数组
  • 0下标开始
  • 支持数组元素运行,但是值应大于0
array=(var1 var2 ... varn)  #定义数组,也可一行一个值
echo ${array[n]}  #输出数组n的值
echo ${array[@]}  #输出所有元素
echo ${#array[*]}  #输出数组个数,加`#`及输出长度

注释

# 单行注释
:<<EOF
注释内容
EOF

除了EOF,也可使用其他符号,只需首尾相同即可

向脚本传递参数

参数解释
$n第n个参数
$#传递参数个数
$$$脚本运行UID
$!后台运行最后一个进程UID
$*传递的所有参数,必须由"包围.
$@同上,参数换行
$-shell当前选项,与set功能相同
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

运算符

算数运算符

原生bash不支持,可使用命令 awkexpr 等(expr为表达式计算工具)

val=`expr 2 + 2`
echo "$val"

*乘号前加上转义(\)

关系运算符

只能判断数字,包括字符串内的数字.返回true or false

运算符解析(成立均返回true)
-eq==
-ne!=
-gt>
-lt<
-ge>=
-le<=

ex: if [ $a -eq $b ]

布尔与逻辑运算符

运算符解析(成立均返回true)
布尔 
!
-o
-a
逻辑 
&&AND
两个竖线OR

字符串运算符

运算符解析
=字符串是否相等
!=不等
-z长度是否为0
-n长度是否不为0
$字符串是否为空;ex: $a

文件属性测试

运算符解析
-b file是否块设备文件
-c是否字符设备文件
-d是否目录
-f是否普通文件
-g是否设置SGID位
-k是否设置粘着位(Sticky Bit)
-p是否有名管道
-u是否设置SUID位
-r是否可读
-w是否可写
-x是否可执行
-s是否为空(文件大小是否为0)
-e文件/目录是否存在
-S是否socket
-L文件是否是个链接

判断

if 条件
then
  命令
else
  命令
fi

> elseif
if 条件
then
  命令
elif 命令
then
  命令
fi

>case
case 变量 in 
 值1)
  命令
  ;;
 值2)
  命令
  ;;
esac

break continue

循环

> for
for var in ary[]
do
  命令
done

>while
while (( $val<=5 ))
do
  命令
done

> do while
until 判断
do
  命令
done

函数

main(){
  巴拉巴拉
  return 1
}
main

参数传递同上

参考资料

菜鸟教程-shell

评论 (暂无评论)

发表评论

昵称:  
邮箱:  
网址: