shell脚本
Shell是一种解释型编程语言,不需要编译,执行时也是按行执行。
shell脚本通常以.sh作为后缀名,但不是必须的。
1、Shell第一行代码 #!/bin/bash 声明这个script使用的是shell解析器
#!/bin/bash
echo "Hello World"
(#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种shell
echo 命令用于向窗口输出文本)
2、运行shell脚本
<1> chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
(注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。)
<2> 作为解析器参数执行shell脚本(直接运行解析器,其他参数就是shell脚本的文件名)
bash test.sh
(这种运行方式运行,第一行不需要添加解释器信息,写了也没用)
3、定义变量
n="tom"
★变量名和等号之间不能有空格
★变量名不能含有bash里的关键字
4、使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可
name="aa"
echo $name
echo ${name}
echo "name:$name"
echo "name:{name}"
(变量名外面的花括号是可选的,加不加都可以,加花括号是为了帮助 解析器识别变量的边界)
例如
age=20
echo "aaa${age}aaa"
echo "aaa$ageaaa"
5、只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
myUrl="https://www.baidu.com"
readonly myUrl
myUrl="https://www.google.com"
运行结果报错
6、删除变量
使用unset命令可以删除变量
unset 变量名
变量被删除后不能再次使用。unset命令不能删除只读变量
#!/bin/bash
myurl="www.baidu.com"
unset myurl
echo $myurl
运行之后不会有输出内容
7、shell字符串
<1>单引号
str='hello'
★单引号里面的任何字符都会原样输出,单引号字符串中的变量是无效的
★单引号子串中不能出现单独一个单引号,但可成对出现,作为字符串拼接使用
age=20
str='your age is ${age}'
echo $age
结果:your age is ${age} (变量在双引号中会被解析,但在单引号中国不会解析)
<2>双引号
yourname="aaa"
str="Hello,I konw you are \"$yourname\"!\n"
echo -e $str (-e:输出的时候,对内容启用转义)
双引号的优点:
★ 双引号里可以有变量
★ 双引号里面出现转义字符
8、拼接字符串
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
输出结果
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
9、获取字符串长度
string="abcd"
echo ${#string} # 输出4
变量维数组时,${#string}等价于${#string[0]}
string"abcd"
echo ${#string[0]} #输出4
10、提取字符串
例:提取字符串第2到第4个字符
s="abcdefg"
echo ${s:1:4}
11、查找字符串
查找字符串i或a的位置(哪个字母先出现就计算哪个)
s="this is a cat"
echo `expr index "$s" ia `
结果输出3,返回的索引值从1开始计数
※ 注意:以上脚本`是反引号,而不是单引号'。