1. helloworld
(1) 作为可执行程序
第1行指定解释器信息:#!/bin/bash
(2) 作为解释器参数,直接运行解释器,参数为shell脚本文件名
eg: /bin/sh test.sh
[root@k8s-master test0]# sh test.sh
Hello World!
[root@k8s-master test0]# chmod +x ./test.sh
[root@k8s-master test0]# test.sh
-bash: test.sh: 未找到命令
[root@k8s-master test0]# ./test.sh
Hello World!
[root@k8s-master test0]# pwd
/root/test/sh-test/test0
[root@k8s-master test0]# /root/test/sh-test/test0/test.sh
Hello World!
[root@k8s-master test0]# cat test.sh
#!/bin/bash
echo "Hello World!"
2. shell变量
变量名与等号之间不能有空格;
hello="hello"
用语句给变量赋值:
for file in `ls /root/test`
for file in $(ls /root/test)
[root@k8s-master test0]# sh test2.sh
test1.sh
test2.sh
test.sh
[root@k8s-master test0]# sh test1.sh
test1.sh
test2.sh
test.sh
[root@k8s-master test0]# cat test2.sh
for file in $(ls /root/test/sh-test/test0)
do
echo $file
done
[root@k8s-master test0]# cat test1.sh
for file in `ls /root/test/sh-test/test0`
do
echo $file
done
3. 使用变量
$var
${var}
花括号帮助解释器识别变量边界
[root@k8s-master test0]# hello="Hello"
[root@k8s-master test0]# echo $hello
Hello
[root@k8s-master test0]# echo ${hello}
Hello
[root@k8s-master test0]# sh test3.sh
I like PythonProgramming
I like CProgramming
I like C++Programming
I like JavaProgramming
[root@k8s-master test0]#
变量重新定义:
hello="Hello"
echo $hello
hello="World"
echo $hello
[root@k8s-master test0]# hello="Hello"
[root@k8s-master test0]# echo $hello
Hello
[root@k8s-master test0]# hello="World"
[root@k8s-master test0]# echo $hello
World
4. 只读变量
[root@k8s-master test0]# cat test5.sh
#!/bin/bash
hello="Hello"
readonly hello
hello="World"
[root@k8s-master test0]# sh test5.sh
test5.sh:行4: hello: 只读变量
[root@k8s-master test0]#
5. 删除变量
unset var_name
unset不能删除只读变量
[root@k8s-master test0]# echo $hello
World
[root@k8s-master test0]# unset hello
[root@k8s-master test0]# echo $hello
[root@k8s-master test0]#
[root@k8s-master test0]# cat test6.sh
#/bin/bash
hello="Hello"
readonly hello
unset hello
[root@k8s-master test0]# sh test6.sh
test6.sh: 第 4 行:unset: hello: 无法反设定: 只读 variable
[root@k8s-master test0]#
6. 变量类型
1) 局部变量:在脚本或命令中定义,仅对当前shell实例有效,其他shell启动的程序不能访问。
2) 环境变量:所有程序(含shell启动的程序)均可访问,必要时shell脚本可定义环境变量。
3) shell变量:shell程序设置的特殊变量。shell程序中一部分是环境变量,一部分是局部变量。
7. 字符串
可用单引号、双引号或不用引号
1) 单引号
单引号中的字符串原样输出,变量无效。不能出现单独的引号,使用转义符也不行,可成对出现作为拼接使用。
[root@k8s-master test0]# hello='Hello'
[root@k8s-master test0]# echo $hello
Hello
[root@k8s-master test0]# hello='Hello'World'
> ^C
[root@k8s-master test0]# echo $hello
Hello
[root@k8s-master test0]# hello='Hello\'World'
> ^C
[root@k8s-master test0]# echo $hello
Hello
[root@k8s-master test0]# hello='Hello''World'
[root@k8s-master test0]# echo $hello
HelloWorld
[root@k8s-master test0]#
2) 双引号
可以有变量;可以有转义字符。
[root@k8s-master test0]# unset hello
[root@k8s-master test0]# hello="Hello"
[root@k8s-master test0]# hello="Hello\'World\'"
[root@k8s-master test0]# echo $hello
Hello\'World\'
[root@k8s-master test0]# hello="Hello'World'"
[root@k8s-master test0]# echo $hello
Hello'World'
[root@k8s-master test0]# world="World"
[root@k8s-master test0]# hello="Hello $world"
[root@k8s-master test0]# echo $hello
Hello World
8. 拼接字符串
1) 双引号
[root@k8s-master test0]# unset hello
[root@k8s-master test0]# hello="hello"
[root@k8s-master test0]# unset world
[root@k8s-master test0]# world="world"
[root@k8s-master test0]# h1="hello, "$world" !"
-bash: !": event not found
[root@k8s-master test0]# h1="hello, "$world"\!"
[root@k8s-master test0]# echo $h1
hello, world\!
[root@k8s-master test0]# h2="hello, $world !"
-bash: !": event not found
[root@k8s-master test0]# h2="hello, $world!"
-bash: !": event not found
[root@k8s-master test0]# h2="hello, $world\!"
[root@k8s-master test0]# echo $h2
hello, world\!
[root@k8s-master test0]# h3="hello, ${world}!"
-bash: !": event not found
[root@k8s-master test0]# h3="hello, ${world}\!"
[root@k8s-master test0]# echo h3
h3
[root@k8s-master test0]# echo $h3
hello, world\!
2) 单引号
[root@k8s-master test0]# echo $hello
hello
[root@k8s-master test0]# echo $world
world
[root@k8s-master test0]# h4='hello, $world!'
[root@k8s-master test0]# echo $h4
hello, $world!
[root@k8s-master test0]# h5='hello, ${world}!'
[root@k8s-master test0]# echo $h5
hello, ${world}!
[root@k8s-master test0]#
9. 字符串长度
${#str_name}
[root@k8s-master test0]# echo $hello
hello
[root@k8s-master test0]# echo ${#hello}
5
10. 截取字符串
第1个字符索引为0
${str_name:start:length}
[root@k8s-master test0]# echo $hello
hello
[root@k8s-master test0]# echo ${hello:1:2}
el
[root@k8s-master test0]#
11. 查找子字符串
`expr index "$str_name" search_string_name
search_string_name中哪个先出现就计算哪个
[root@k8s-master test0]# echo $hello
hello
[root@k8s-master test0]# echo `expr index "${hello}" el`
2
[root@k8s-master test0]# echo `expr index "${hello}" le`
2
[root@k8s-master test0]# echo `expr index "${hello}" lo`
3
[root@k8s-master test0]#