Shell变量
分类
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串、整型、浮点型、日期型 |
| 环境变量 | 当前shell及其子shell | export、declare -x | |
| 系统环境变量 | 所有shell | 启动加载 |
定义
自定义变量
-
变量名=变量值
your_name="runoob.com"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线 _ 。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
环境变量
系统环境变量
运算符
管道
语法: cmd1 | cmd2
作用:将前一个命令的结果传递给后面的命令
要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理。
注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefail设置shell遇到管道错误退出
判断命令
概述
用于整数、字符串、文件测试
test
语法:test condition
#!/bin/bash
# 整数测试
tset $n1 -eq $n2 #等于
tset $n1 -lt $n2 #小于
tset $n1 -gt $n2 #大于
# 字符串测试
test -z $str_a #为空
test -n $str_a #非空
test $str_a = $str_b
# 文件测试
test -e /dmt && echo "exist" #是否存在
test -f /usr/bin/npm && echo "file exist" #是否存在且是普通文件
[
语法:[ condition ]
注意:
- <、>、=只能用来比较字符串
- 中括号内的变量,最好使用引号括起来
[[
语法:[[ condition ]]
注意:[[在整型中支持<、>、=,在字符串中比较支持=~正则
分支语句
if
#! /usr/bin/env bash
read -p "请输入一个整数:" n
if [[ $n < 3 ]]; then
echo "$n < 3."
elif [[ $n < 5 ]]; then
echo "3 <= $n < 5."
else
echo "$n >= 5"
fi
复制代码
case
#! /usr/bin/env bash
read -p "请输入一个整数:" n
case $n in :
1)
echo "One"
;;
2)
echo "Two"
;;
3)
echo "Three"
;;
*)
echo "Error"
;;
esac
循环语句
while
语法:
while condition ;
do
程序段
done
until
条件成立跳出循环
语法:
until condition ;
do
程序段
done
for
两种写法
-
for var in [words...] do 程序段 done -
for((i=0;i<10;i++)) do 程序段 done
函数
语法:
- funcName(){ echo "abc"; }
- function funcName(){ echo "abc"; }
注意:
- shell自上而下运行,函数必须在使用前定义
$()代表函数名,后续参数通过$1、$2...- return不结束函数、之代码函数的执行状态
- 返回结果一般使用
echo、printf,在函数外部使用$()、``获取结果 - 如果没有
return,函数状态为上一条命令的状态,存储在$?中 - 建议函数内定义变量用
local修饰,表示仅在当前作用域内有效;或者当函数结束时使用unset撤销变量
模块化
在当前shell内执行函数文件
语法:source [函数库的路径]
本文若有不足之处,欢迎纠正