Shell学习
2020.07.15
最近开始做一些程序自动化的代码,重新温习一下shell语法
另外发现了一个hexo的解析问题:{和$不能连在一起
Linux shell推荐工具:tmux+zsh tmux实现终端复用,zsh中可以再装一些插件提高开发效率,而且界面也好看一些
基础
程序运行
运行shell
./run.sh # 注意是./run.sh而不是run.sh
windows下运行shell
使用git bash
设置要调用的shell解释器
#!/bin/bash
设置shell脚本权限
由于默认创建的sh没有执行权限,因此需要chmod
chmod +x run.sh
调用shell时附加参数
sh run.sh 0 abcd 123 echo ${0} # run.sh echo ${1} # 0 echo $# # 3 (3个参数)
变量
临时环境变量与永久环境变量
临时环境变量为一般环境变量,随控制台生灭
永久环境变量分为:系统变量、用户变量
/etc/profile # 系统变量文件 $HOME/.bash_profile # 用户变量文件 # 常见变量 $HOME $PATH $PWD
注:.bashrc 与 .bash_profile的区别,bashrc中的内容在每次开启新的控制台都会执行一次,关闭时也会跟着结束(临时变量)
.bash_profile在用户登录时执行,属于永久变量
定义
name="tangchuan" # 注意=不能有空格 arr=(1 2 3 4 5) # 注意是空格不是逗号
使用 在定义的变量面前加
$name
echo $name echo $ {a[0]} echo $ {a[@]} # 输出全部元素 echo $ {#a[@]} # 计数
类型
类型 code 字符串 'this is a string' "My name is ${name}"
数组 a=(1 2 '?' 'hello')
注:字符串单双引号的区别,单引号中不能再出现单引号,双引号中可以插入变量
${var}
运算
\* # 乘号需要转义 [ expression ] # 条件命令 等同于 test expression [ 1 == 1 ] ;echo $? # 返回上一个命令的返回值0表示true,1表示false 分号是命令连接号
整数比较符号
-eq
-ge
-le
-lt
-gt
-ne
控制
1. 条件
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
else
当所有条件都不成立时,最后执行此程序
fi
2. 循环
for循环
# for in
for N in 1 2 3
do
echo $N
done
# for((i=0;i<=5;i++))
while循环
while expression
do
done
函数
自定义函数
func() { val=$0 return ${val} } # 调用 func "hello world"
常用函数
函数名 | 用途 |
---|---|
echo | |
${ #string} |
输出字符串长度 |
${dtring:1:4} |
提取字符串 |
set | 展示所有变量 |
unset NAME | 删除某一个变量 |
export NAME=value | 声明环境变量(当前shell以及子shell) |