Linux Shell编程基础

shell好像很有用,虽然我不大明白用来干啥的,好像是有很多可以调用系统参数的变量,所以适合在Linux写脚本?
菜鸟教程是用的bash,那我就照着来吧
第一行基本都是#!/bin/sh或者#!/bin/bash打头,告诉系统脚本用什么解释器执行,然后文件记得加上可执行的权限
另外如果是在当前目录执行文件,记得以./开头,否则回去PATH里面搜索文件,一般是搜索不到的
还有一种脚本执行方法是/bin/sh xx.sh,即你的第一行可以省略了,直接运行解释器执行脚本了

变量

变量和PHP差不多,不过不加$符号,变量声明要记住=左右别加空格了,这和PHP是不一样的,然后使用变量就要在前面加上$符号

name="what";
echo "hello $what";
echo "${what} yet;

和PHP一样,输出的时候可以加{}来标识变量,以防止和其他字符串混淆
变量是可以修改的,name="so",就把what替换成了so,
另外shell还有只读变量的设定,readonly name,这样就无法进行变量的修改了
删除变量使用unset,unset name就可以删除了,当然如果根据我写的一路执行下来是会报错的,因为只读变量无法删除

变量类型除了常见的局部变量外,shell没有全局变量的概念,而是多了环境变量和shell变量,当然局部变量的定义也和其他语法有所区别

  • 局部变量:脚本或者命令行定义,仅在当前shell实例中生效
  • 环境变量:所有程序,包括shell启动的程序都能访问
  • shell变量:由shell程序设置,一部分是局部变量,一部分是环境变量

Shell数据类型

Shell字符串

单引号和双引号的区别和PHP差不多,双引号里面可以有变量存在,另外,单引号里面单引号不能单独出现,就算是转义字符的单引号也不可以
shell拼接字符串只要往后面写变量就可以了,不用别的符号"this is"$name,空格加在is后面或者$name前面都是可以生效的
获取字符串长度用echo ${#name},提取字符串有点类似切片,echo ${name:1:2},输出ha
查找子字符串可以用echo `expr index "$name" ha`;来实现

Shell数组

貌似只有索引数组,没得关联数组,键是字符串的话,会作为0覆盖掉,然后可以不使用连续的下标
数组定义有下面几种,主要是空格隔开每个值;输出则是引用下标,只不过方便的是可以用@全部输出出来

arr=("a" 1 "b");

arr[0]="what"
arr[1]="so"

echo ${arr[0]}
echo ${arr[@]}

可以用${#arr[@]}或者${#arr[*]}获取数组个数,也可以用${#arr[0]}获取单个元素的长度

Shell注释

单行注释用#就可以了,如果是多行注释,就有点类似PHP的heredoc了

:<

EOF是可以用别的替换的,和heredoc区别主要是开头是:

Shell传递参数

传递参数只需要在执行文件的后面空格+参数就可以了,譬如./hello.sh 1 2 3,这里就给了三个参数给脚本。
要在脚本使用参数则是$+数字来获取,不过$0代表的是脚本本身,即./hello.sh,而$1 $2 $3也就是后面所跟随的参数,如果下标溢出,则输出一个空行(Shell好像没null这个类型,不知道将这空行理解为空字符串正不正确)

其中几个特殊字符处理参数,由于都是$开头,我就省略这个符号了

  • #:传递到脚本的参数个数
  • *:把参数作为字符串一起传递,相当于输出$1$2$3……
  • $:脚本运行的当前进程ID号
  • !:后台运行的最后一个进程ID号
  • @:显示和*是一样的,不过他输出的是单独的字符串,相当于"$1""$2""$3"……这样子
  • -:Shell使用的当前选项
  • ?:显示最后命令的退出状态。0表示没有错误


    image.png

你可能感兴趣的:(Linux Shell编程基础)