while 语法读取文件每一行
while read line ;do
echo $line
done < /path/file;
test命令
test命令基本等价于 []
用法示例:
if test -e ./file;then
echo true
fi
表达式相关
获取表达式的值 : $(())
示例:
echo $((6%3))
输出 0
也可以进行赋值
$((var=6%3))
echo $var
输出var的值
数组相关
数组定义
arr=(`ls ./`)
arr=(1 2 3 4)
数组遍历
arr=(1 2 3 4)
for i in ${arr[*]};do
echo $i
done
if条件判断的注意事项
[]
变量与[
或者]
需要空格隔开
test命令与[]
的执行可以说基本一致,只是执行的方法
[[]]
遵循逻辑短路,[]
不遵循逻辑短路
[[]]
支持 && || > < 逻辑判断符
-a
, -o
表示逻辑
提示:
[]
中只能使用-a或者-o进行与逻辑判断,[[]]
支持&&操作符
[]
或者[[]]
中使用问题:
1.判断条件值需要用空格与[
隔开
2.判断条件需要两个值需要与逻辑判断符用空格隔开123 == 123
,否则会一直返回true
3.if判断的用法不仅限于 [[]] 判断
if echo "$word" | grep "123"
then
echo "123"
else
echo "not found"
fi
字符串
实现字符串的拼接
1.str=
str1
{str2}
2.str=”
str1
str2”
获取命令的执行结果
chars=$(cat /etc/password)
chars 变量的值就是执行car /etc/password
的结果
参数替换
${parameter-default}
与${parameter:-default}
差异
asdasd=456
var1=${www:-asdasd}
echo var1 #输出456
unset var1
var1=
var1=${www:asdasd}
echo $var1 # 没有输出信息
当var1 声明,但是值为null时,${parameter:default}
不会输出值
赋值时需要注意
echo ${var=abc} #输出var的值为abc
echo ${var=xyz}#输出var的值为abc,var的值已经赋值不会改变,也就是说对于已经赋值的变量不会改变其值
${parameter+alt_value},${parameter:+alt_value}
注意事项
1.给变量赋值时 =
两边不要存在空格,否则会当成命令进行执行
2.
?这个变量存储的是最近的命令的执行结果0执行正确其它执行错误3.
@是所有的参数列表,$#为参数的个数
4.脚本中单引号不可包含变量,双引号字符串换可以
5.多个语句写在同一行需要用 ;
进行分割
6. 中间的command可以赋值于变量,执行后的输出
7. command &> filename 重定向输出错误与标准输出
技巧
1.赋值字符串也可以不要引号
var1=123\ water
echo $var1 #123 water
补充我们也可以多行输入
echo 123\
456
#123456 输出一行
2.赋值ASCII码值
附录表:
文件相关
-e filename 如果filename存在则为真
-r filename 如果文件存在且可读为真
-w filename 如果文件存在且可写为真
-x filename 如果文件存在可写为真
-d filename 如果文件存在且为目录为真
-f filename 如果文件存在且为普通文件为真
字符串相关
==,!= 判断字符串相等或者不等
-z 判断字符串长度为0则为真
-n 判断字符串长度不为0则为真
全局变量
$UID
只有当值为0时,执行脚本的权限为root权限