沉铝汤的破站

IS LIFE ALWAYS THIS HARD, OR IS IT JUST WHEN YOU'RE A KID

Linux-Shell脚本

0x01 编写一个简单的脚本


  • 新建一个.sh后缀 的文件, touch test.sh

  • vim test.sh,内容如下:

    #!/bin/bash
    #This Is A Test
    pwd
    ls -al
  • #!告诉系统使用哪一种Shell解释器,第二行的#用来注释,之后的就是脚本内容

  • bash test.sh执行脚本,或者先给文件执行权限chmod +x ./test.sh,注意要有./,然后执行./test.sh

0x02 Shell变量

定义

定义变量的规则和其他编程语言差不多,值得注意的是Shell变量与等于号之间不能有空格(代码规范党/(ㄒoㄒ)/~~)

已经被赋值的变量(除了只读变量),可以重新赋值。

使用

使用一个定义过的变量,只需要再变量名前添加美元符号echo $test或者ehcho {$test}, 使用花括号可以避免这种情况echo "i just want to say $helloto you",他会把$helloto当作一个变量。

只读变量

readonly可以将变量设置喂只读变量,只读变量的值不能被改变。

#!/bin/bash
test='a'
readonly test

删除变量

使用unset可以删除变量(但是不能删除只读变量), unset test

0x03 Shell字符串

单双引号

双引号和单引号的区别和PHP差不多,双引号中可以放变量,一般说,单引号中的字符都会原样输出,但是这样可以输出变量'this is '$test'!'

获取字符串长度

string = 'a'
echo ${#string} #1

提取子字符串

string = 'this is a test'
echo ${string:0:4}#还蛮有Python那味的,哈哈,或者说,Python蛮有这味的?

查找字符串

string = 'this is a test'
echo `expr index "$string i"`#查找i的位置,是从1开始,这个expr命令

0x04 Shell注释

单行注释#

多行注释:<<[字符啥的]...[字符]

0x05 Shell数组

bash只支持一维数组,其他有待接触

定义数组

array_name=(value0 value1)
#or
array_name=(
val0
val1
)
#or
array_name[0]=val0
array_name[1]=val1
#...array_name[n]=... 值得注意的是可以使用不连续的下标,而且下标的范围没有限制

读取数组

var1=${array_name[n]}读取某个数组

echo ${array_name[@]}@或者*来读取所有元素

获取数组的长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[index]}

0x0 接收用户的参数


$0为当前Shell脚本的名称,$#对应总共有几个参数,$*对应所有位置的参数值, $?对应显示上一次命令的执行返回值,$1...$N对应第N个参数

  • 编写脚本如下

    #!bin/bash
    echo "当前脚本名称为$0"
    echo "总共有$#个参数,分别为$*"
    echo "第一个参数为$1,第二个参数为$2"
  • bash test.sh 1 2 3 , 后面的1、2、3即为参数

0x03 判断


写到这里先不写了。