shell

237 阅读2分钟

基本语法

第一行

指定用什么解释器:         #! /bin/bash (使用bash解释器)

可以通过vim /etc/shells 查看本机支持什么解释器

所以运行的时候要选择对应的解释器:/bin/bash    ./test.sh( 运行脚本的方式:./+filename)

变量

创建: 与string定义类似:name="name",但是不能是shell关键字

删除:unset name

使用:在变量前加 $name,可以加{}来识别边界

shell字符串

可用单引号,双引号或无引号,最好使用双引号,因为双引号中可以输出变量

获取长度:#name,还有其他操作

数组

定义:name=(str1 str2) 之间用空格隔开

使用:获取某个元素:name[index]

获取所有元素:name[@ | *]

获取元素个数与字符串相同:#name[*]

注释

单行注释:#

多行注释: :<<EOF 注释内容 EOF

shell传递参数

在脚本中获取参数的方式为:$n, n为传递进来参数的顺序

例如:/bin/bash ./test.sh 1 2 3 ,在脚本中可以通过$1,$2。。来获取参数

运算符

算数运算符与正常的相似

关系运算符:-eq:等于 -ne:不等 -gt:大于 -lt:小于 -ge:大于等于 -le:小于等于(以上所有结果返回boolean值)

逻辑运算符:&& ||

字符串运算符:= 两个字符串是否相等 != 不等 -z 长度是否为0 (均返回Boolean)

str判断字符串是否为空,不为空返回true

文件测试运算符:-d filename 文件是否是目录

  • -f filename 文件是否是普通文件
  • -r/w/x filename 文件是否可读/写/执行
  • -s filename 文件是否为空
  • -e filename 检测文件(目录)是否存在

echo:用于输出内容

输出内容:echo "name"

输出并换行:echo "name \n",还可以用其他的转义字符

printf:类似于C语言的输出,可以输出很多格式和转义

test命令:测试某个条件是否成立

shell流程控制

if-else-fi(注意结束要用fi)

与java语言不同,流程控制不能为空,如果else中没有内容,那么就不要写else

for循环

for item in item1   item2    item3    item4
do   echo $item  .......
done

while语句

while   条件(read file->指读取键盘的输入信息,将信息赋值给变量file)
do     ..... 
done

case语句

casein
    case1) 
         command1
         。。。。。
               ;;
    case2)    
         command1
         。。。。。
               ;;
esac(结束语句,case反过来)

跳出循环

breake(结束循环) 
continue(跳出本次循环)

shell函数

[ function ]    funname [()]  {    []是可选的意思
             action;
             [return int;]
}

函数返回值在调用该函数后通过 $? 来获得

shell输入/输出重定向

输出重定向:command > file:表示执行完命令后将输出的结果存入file中,内容将会被覆盖,如果是想要追加到末尾用>>

输入重定向:command < file:表示将文件中的命令读取到command中

shell文件包含

shell包含脚本,将一些公用的代码封装

语法:. filename(.和filename之间有空格) 或 source filename

可在引用的文件中使用被引用文件的所有内容(变量。。。)