shell语言学习笔记
name = "theing"
str="Hello ${name} I know you are \"$name\"! \n"
# 打印Hello theing I know you are "theing"!
echo $str 打印字符串
unset name 删除这个变量
echo ${#str} 输出字符串长度
echo ${str:1:4} 输出字符串索引1:4
数组
array_name=(value0 value1 value2 value3)
array_name[1]=value1
valuen=${array_name[n]}
echo ${array_name[@]} 获取数组中所有的元素
# 取得数组元素的个数
length=${#array_name[@]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
传递参数
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1"; # 这里的1是索引
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
终端输入:
$ chmod +x test.sh 设置脚本为可执行权限
$ ./test.sh 1 2 3
终端输出:
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
参数个数为:3
传递的参数作为一个字符串显示:1 2 3
## 调用循环打印输入的参数
echo "-- \$* 演示 ---"
for i in "$*"; do ## 用*号的时候是不换行的
echo $i
done
echo "-- \$@ 演示 ---"
for i in "$@"; do ## 用@的时候是换行的
echo $i
done
输出
$ chmod +x test.sh
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3
shell 基本运算符
## 算数运算符
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
输出的结果
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b
参考,搜索关系运算符,shell关系运算符不是大于小于什么的。
显示换行
echo -e "OK! \n" # -e 开启转义 \n换行
echo -e "OK! \c" # -e 开启转义 \c 不换行
表格输出
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
输出:
姓名 性别 体重kg
郭靖 男 66.12
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐)
%-4.2f 指格式化为小数,其中.2指保留2位小数。
printf的转义序列
test命令
关于 数值的测试、字符串的测试、文件是否存在,字符串等的测试
参考
for、while 循环
# for
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
# 输出:
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
# while
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
# 输出:
1
2
3
4
5
## 跳出循环 break ,跳出当前循环 continue
shell 函数
# 好的例子:
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !" ## 注意这里的$?调用的是函数返回的值
# 输出:
这个函数会对输入的两个数字进行相加运算...
输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !
函数接收参数
注意10以上就要用{}
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
## 输出为:
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
shell 的输入和输出重定向
基本就是一个<;>:>>的过程
| 命令 | 说明 |
|---|---|
| command < file | 将输入重定向到 file。 |
| command > file | 将输出重定向到 file。 |
| command >> file | 将输出以追加的方式重定向到 file。 |
| n > file | 将文件描述符为 n 的文件重定向到 file。 |
| n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
| n >& m | 将输出文件 m 和 n 合并。 |
| n <& m | 将输入文件 m 和 n 合并。 |
| << tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
shell 文件包含
Shell 也可以包含外部脚本。