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.…