概念
参考: shell基本操作
- 变量
xname=张三 #定义变量
echo $xname #使用变量
xname=李四 #重新定义变量
echo ${xname} #使用变量,加花括号是为了帮助解释器识别变量的边界
readonly xname #定义只读变量
unset xname #删除变量,不能删除只读变量
#注意,变量名和等号之间不能有空格
- 字符串
name1='this is a string' #单引号
xname="hello" #双引号
name2="this is a var ${xname}" #使用
*单双引号和php类似*
name="abcdefg"
echo ${name}
echo "字符串name的长度:"${#name} #获取字符串长度
echo ${name:2:3} #提取子字符串,从第2个字符开始,截取2个
echo ${name:2} #截取第2个字符以后的全部
echo `expr length ${name}` #获取字符串的长度
echo `expr index ${name} d` #获取字符第一次出现的位置
echo `expr substr ${name} 2 3` #从第2个字符开始,取3个
- 数组
arr=("hello" "word") #定义数组
echo ${arr[1]} #读取数组
echo ${arr[@]} #获取全部
echo "数组的长度为:"${#arr[@]} #数组长度
echo "单个元素的长度为:"${#arr[1]} #单个长度
-
传递参数
- $i:代表第i个参数
- $#:代表参数个数
- $*:代表所有参数,返回形式: 以”$1 $2 … $n”的形式输出所有参数
- $@:与$*相同,返回形式: 以”$1” “$2” … “$n” 的形式输出所有参数
- $?:代表上一个命令的返回值
- $$:当前脚本的进程号
- $!:后台运行的最后一个进程ID号
-
基本运算
- 算术运算
echo `expr 2 + 2` #表达式和运算符要有空格,2+2是不对的,完整的表达式要被``包含
if [ 2 == 2 ] #条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
then
echo "2==2"
fi
- 关系运算
-eq -ne -gt -lt -ge -le
a=$1
b=$2
if [ $a -eq $b ]
then
echo '$a=$b'
else
echo '$a!=$b'
fi
- 布尔运算
! 非 -o 或 -a 与
- 逻辑运算
&& 逻辑and | 逻辑or |
- 字符串运算
-z:字符串长度是否为0 -n:非0 str:是否为空 =:是否相等
- 文件测试
-f:是否文件 -d:是否目录 -x:是否执行 -e:是否存在
- printf命令
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数
- test命令
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
a=100
b=100
if test ${a} -eq $[a+b] #[]执行基本的算数运算
then
echo "="
else
echo "!="
fi