文章目录
- 变量
- 分支
- 循环
- 函数
- 函数案例
变量
- 普通变量
- 声明变量,直接赋值,同python
- =两边
不能
有空格 - ‘’ 单引号表示纯字符
- “”双引号表示一个整体
- ``反引号表示操作命令
- 末尾没有;号
# 直接赋值,
name='jack' # 纯字符
pyCode='import os\nimport csv\n xxxx'
# -e 识别转义字符,输出到文件中
echo -e $pyCode > content.txt # $符引用变量的值
state="name is jack, current dir $(pwd)" # 必须带括号
echo -e $state >> content.txt
- 环境变量
- 配置环境变量,以使linux操作系统可以使用。
当前用户
下的环境变量
# 编辑文件
vim ~/.bashrc
# 配置环境变量
export PATH=$PATH:/home/xxx/py
export LD_LIBRARY_PATH=XXXX
# 保存后,使用变量生效
source ~/.bashrc
全局
的环境变量
# edit
vim /etc/profile
# config
export PATH=$PATH:/home/xxx/py
# enable
source /etc/profile
- 命令行变量
- shell 脚本命令行
- 函数的参数
# 执行shell脚本,传参
$ sh laufing.sh param1 param2
# 脚本中使用$1 $2 ....$9..${10}
# 获取参数个数 $#
# 获取所有的参数 $* / $@
# $?上一条指令的执行结果 0表示成功
# 定义函数 类js
function func(){
echo $1
echo $2
}
# 执行函数
func param1 param2
分支
- test xxx,表示测试条件,成功返回true
- 数值比较
- -eq 等于
- -gt 大于
- -lt 小于
- -ge 大于等于
- -le 小于等于
- 字符串比较
- = 相同
- != 不同
- -z 长度为0
- 文化目录的判断
- -e 文件或者目录是否存在
- -f 存在且为文件
- -d 存在且为目录
- -r 文件存在且可读
- -w 文件存在且可写
- -x 可执行
# test判断语句
if test 5 -gt 3;then
echo "true"
fi # 结束
# [] 也表示测试语句,必须有空格
if [ $1 = '' ];then
echo "no params"
elif [ $1 = 'lauf' ] || [ $1 = 'tom' ];then
echo "lauf or tom params"
else
echo "other params"
fi
&& || 连接多个测试条件,
! 条件内部取反
循环
# 循环数组, 闭区间
for i in {1..5};do
echo $i
done
# 变量目录下的文件
curDir=`ls $(pwd)` # 数组
for i in $curDir # 引用数组
do
echo $i
done
函数
shell定义数组特别简单,类似js。
function func1(){
echo $1 # 打印第一个参数
}
# 函数调用,并传参
func1 "tom" 4
函数案例
递归实现每个目录下添加文件。
创建lauf.sh脚本
#!/bin/bash
function addFile(){
if [ -d $1 ];then
echo "add file for $1"
touch "$1/lauf.txt"
# recursive
dealDir $(pwd)/$1
fi
}
function dealDir(){ # need absolute path
cd $1
curFiles=`ls $1`
for i in $curFiles;do
addFile $i
done
}
# sh lauf.sh /home/laufing/aa
dealDir $1