shell知识点快速入门(复习)笔记(前)
变量
获取字符串长度
string="abcd"
echo $string #输出abcd
echo ${#string} #输出 4
提取子字符串
string="I am a beautiful girl"
echo ${string:1:4} # 输出 am
数组
array_name=(value0 value1 value2 value3)
获取数组长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
$ array_name=(value0 value1 value2 value3)
$ length=${#array_name[@]}
$ echo $length
4
[dengyueying@cjzz_dev ~]$ lengthn=${#array_name[1]}
[dengyueying@cjzz_dev ~]$ echo $lengthn
6
传参
获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…($0为文件名)
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
运行结果:
[dengyueying@cjzz_dev shell]$ ./test4.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test4.sh #$0
第一个参数为:1
第二个参数为:2
第三个参数为:3
for循环($* 和 $@)
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
数组
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
结果:
$ chmod +x test6.sh
$ ./test6.sh
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D
数组长度
同上数组
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
结果
数组元素个数为: 4
数组元素个数为: 4
运算符:
算术运算符与C没什么不同,这里省略。
同时,因为博主暂时用不到文件测试运算符,所以以下也不会提及
关系运算符
变量 a 为 10,变量 b 为 20
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的 | [ $a -le $b ] 返回 true。 |
布尔运算符
运算符 | 说明 ] | 举例 |
---|---|---|
-o | 或运算,有一个表达式为 true 则返回 true | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
! | 非运算,表达式为 true 则返回 false | [ ! false ] 返回 true |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
逻辑运算符
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
ll | 逻辑的 OR | [[ $a -lt 100ll $b -gt 100 ]] 返回 true |
字符串运算符
变量 a 为 “abc”,变量 b 为 "efg
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个数是否不相等 | [ $a -ne $b ] 返回 true。 |
-z | 检测左边的数是否大于右边的 | [ $a -gt $b ] 返回 false。 |
-n | 检测左边的数是否小于右边的 | [ $a -lt $b ] 返回 true。 |
$ | 检测左边的数是否小于右边的 | [ $a -lt $b ] 返回 true。 |
echo命令
字符串输出
$ echo "It is a test"
It is a test
$ echo It is a test
It is a test
$ echo "\"It is a test\""
"It is a test"
变量输出
读入一行,再调用变量输出
$ read name
Amos
$ echo "$name is so smart"
Amos is so smart
转义字符
字符 | |
---|---|
\n | 换行 |
\c | 不换行 |
– | – |
> | 结果定向至文件,例:echo “It is a test” > myfile |
\f | 换页(formfeed |
\t | 水平制表符 |
\v | 垂直制表符 |
显示命令执行结果
例
echo `date`
Thu Jul 9 12:05:18 CST 2020
printf 命令
printf 命令模仿 C 程序库(library)里的 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
结果
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99
例:
# format-string为双引号
printf "%d %s\n" 1 "abc"
# 单引号与双引号效果一样
printf '%d %s\n' 1 "abc"
# 没有引号也可以输出
printf %s abcdef
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
$ printf "%s\n" abc def
abc
def
$ printf %s abc def
abcdef$
# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"
#结果:and 0
not end~~~