shell 编程 (1)简单使用

25 篇文章 0 订阅
15 篇文章 0 订阅

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]# 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值