不忘初心,方得始终:
在此写文章主要是起笔记本的作用,以免之后长时间不用导致知识点遗忘。
语法:
1、#!:用来告诉系统用什么解释器来执行脚本;
#!/bin/bash
2、echo:向窗口输出文本;
echo "Hello World !"
3、chmod +x ./XX.sh:给脚本XX.sh权限;
chmod +x ./test.sh #给脚本test权限
4、变量定义:
your_name="CSDN"
变量名与等号之间不能有空格!
5、使用变量:
echo $your_name
echo ${your_name}
两种变量使用方法都行,下面可以用于输出较为复杂的情况以便于正确输出。
6、只读变量:
test_name="This is a test_var"
readonly test_name
test_name="This is not a test_var" #此句报错,因为只读变量不能被修改
只读变量的值不能被修改,也不能被删除。
7、删除变量:
delete_name="This is a delete_var"
echo delete_name
unset delete_name
echo delete_name
输出结果为:
This is a delete_var
8、变量类型:shell运行时会有三种变量,局部变量、环境变量以及shell变量。
局部变量仅在脚本或命令中定义,在shell实例中使用,其他shell启动的程序不能访问;
环境变量指所有程序,包括shell启动的程序都可以使用的变量。shell脚本也可以定义环境变量;
shell变量是shell程序设置的特殊变量,一部分为局部变量,一部分为环境变量。
9、shell字符串:
单引号:1、里面的内容被直接输出,会无视变量,但是会保留转义字符的效果;2、单引号必须成对出现。
#!/bin/bash
str1="test"
str2='This is a '$str1' string\n'
str3='This is a $str1 string\n'
echo $str2
echo -e $str2
echo -e $str3
这段话的输出结果为:
This is a test string\n
This is a test string
This is a $str1 string
其中,echo -e 表示翻译转义字符,即转义字符起作用。
此处str2是作为字符串拼接使用的,所以变量str1此时被替换了,但是str3中的str1并没有被调用,所以单引号中会无视变量。
双引号:1、双引号中可以输出变量;2、双引号中可以输出转义符。
#!/bin/bash
str1="test"
str2="This is a "$str1" string\n"
str3="This is a $str1 string\n"
echo $str2
echo -e $str2
echo -e $str3
这段话的输出结果为:
This is a test string\n
This is a test string
This is a test string
可以看到str3中的变量str1也被替换为了test,此处与单引号做区分。
10、字符串一些简单其他用法:
拼接字符串:
#!/bin/bash
str1="杨77"
echo "双引号用法:我的名字叫"$str1"(双引号)!"
echo '单引号用法:我的名字叫'$str1'(单引号)!'
echo "双引号用法:""不含变量的情况"
echo '单引号用法:''不含变量的情况
这一段的输出结果为:
双引号用法:我的名字叫杨77(双引号)!
单引号用法:我的名字叫杨77(单引号)!
双引号用法:不含变量的情况
单引号用法:不含变量的情况
获取字符串长度:
#!/bin/bash
str="This is a test string"
str2="中文测试字符串"
echo 'length of string "This is a test string" is '${#str}
echo 'length of string "This is a test string" is '${#str[0]}
echo '字符串”中文测试字符串“的长度为:'${#str2}
echo '字符串”中文测试字符串“的长度为:'${#str2[0]}
这一段的输出结果为:
length of string "This is a test string" is 21
length of string "This is a test string" is 21
字符串”中文测试字符串“的长度为:7
字符串”中文测试字符串“的长度为:7
可以看出${str}和${str[0]}的作用一致,并且一个中文字符的长度为1(C++字符串中一个中文字符长度为3?)。
提取字符串:
#!/bin/bash
str="This is a test string"
str2="中文测试字符串"
echo ${str:1:4}
echo ${str2:1:4}
echo ${str2:1:9}
这一段的输出结果为:
his
文测试字
文测试字符串
可以看到,索引即使超出了长度,也不会报错,另外为了方便记忆,可以认为第一个冒号是为了区分字符串变量和索引编号,第二个冒号是用来区分索引上下界,shell的索引也是从0开始。
查找子字符串:
#!/bin/bash
str="This is a test string"
str2="中文测试字符串"
echo `expr index "$str" io`
echo `expr index "$str" oi`
echo `expr index "$str" ox`
echo `expr index "$str" 'is'`
echo `expr index "$str" 'io'`
echo `expr index "$str2" 文`
echo `expr index "$str2" "文测"`
echo `expr index "$str2" "文字"`
输出的结果为:
3
3
0
3
3
2
2
2
注意,其中`为数字1左边的符号,不是单引号。
目前找到的查找字符串只能判断后面字符串中字母在主序列首先出现的地方,后续该部分待完善。