shell 脚本学习

222 阅读2分钟

shell 脚本学习

前言

新的一年又到来,趁着放假3天,学习了一下关于shell脚本知识点。虽然运用不多,但熟悉后运用起来的确不错,起码学习成本会比其它的低。本来是想去b站的教学,后来发现还是太慢,网上找了一番资料,感觉网道写的不错,都是很基础的知识点,在后面会贴出相关的链接。

简介

Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。

运行一下我当前的 Shell

% echo $SHELL

/bin/zsh

基本语法

echo命令

命令的作用是在屏幕输出一行文本。

% echo hello world

hello world

&& 与 ||

Command1 && Command2

Command1命令运行成功,则继续运行Command2命令。

Command1 || Command2

如果Command1命令运行失败,则继续运行Command2命令。

快捷键

  • Ctrl + C:中止当前正在执行的命令。
  • :浏览已执行命令的历史记录。
  • Ctrl + a:移到行首。
  • Ctrl + e:移到行尾。
  • clear:清除当前屏幕。
  • Tab:自动补全。

引号转义

echo \$date

$date

没有 \ ,是不会输出结果的。

变量

变量都是字符串。

variable=value

等号左边是变量名,右边是变量。注意,等号两边不能有空格。例子如下:

myvar="hello world"

定义一个myvar变量,内容为hello world

那如何读取变量呢,直接在变量后面加 $。例子如下:

% foo=bar

% echo $foo

bar

还有1种输出方式是加大括号。

echo ${foo}

如果输的变量不存在,就当时空字符串。

所以可以添加一个默认值。

%echo ${foo:-word}

bar

% echo ${foo2:-word}

word

如果 foo 为空,则输出为 word

字符串操作

字符串长度

$ myPath=/home/cam/book/long.file.name

$ echo ${#myPath}

29

子字符串

$ myPath=/home/cam/book/long.file.name

echo ${myPath:4:4}  

e/ca

算术运算

((...))语法可以进行整数的算术运算。

$ ((foo = 5 + 5))

$ echo $foo

10

echo $((foo*=2))

20

脚本运行

./shell/test.sh

. 是当前目录,shell 是文件夹,test.sh 是脚本文件。

如果没有权限,需要先赋予权限。

#给所有用户读权限和执行权限
$ chmod +rx script.sh
# 或者
$ chmod 755 script.sh

脚本的权限通常设为755(拥有者有所有权限,其他人有读和执行权限)或者700(只有拥有者可以执行)。

注释

直接用 # 就行。

参数

./shell/test.sh a b

参数以空格隔开, 第一个参数为 a ,第二个参数为 b

接收参数就直接是 $1$2

脚本退出

# 退出值为0(成功)
$ exit 0

# 退出值为1(失败)
$ exit 1

read 命令

read 接收用户输入的指令。

test.sh 添加下面语法。

echo "输入一些文本"

read text

echo "你输入的是: ${text}"

运行结果:

./shell/test.sh

输入一些文本

abc

你输入的是: abc

条件判断

if commands; then
  commands
[elif commands; then
  commands...]
[else
  commands]
fi

按照这个格式去写就好,记得不要忘记后面有 fi

循环

while 循环

while condition; do
  commands
done

for...in 循环

for variable in list
do
  commands
done

for 循环

for (( expression1; expression2; expression3 )); do
  commands
done

select 结构

在脚本文件写上:

select brand in Samsung Sony iphone symphony Walton

do

  echo "You have chosen $brand"

done

终端执行:

% ./shell/test.sh

1) Samsung

2) Sony

3) iphone

4) symphony

5) Walton

#? 1

You have chosen Samsung

函数

脚本里面函数。

test() {
    echo "函数调用:$1"
}

test a

a 是第一个参数,和上面的是一样的。

数组

数组写法:

array=(a b c)

读取数组的值:

${array[1]}

遍历数组:

for str in "${array[@]}"

do

 echo $str

done

数组长度:

${#array[@]}

set

set -e

头文件设置,脚本只要发生错误,就终止执行。

后记

上面写的内容基本都是很简单的语法和命令,之所以写一遍就是为了加深一下印象,等需要用到的时候,再去查询即可。

参考资料: wangdoc.com/bash/intro.…