Shell高级编程
一、什么是Shell 编程
Shell编程,编写Shell脚本,并且该脚本可以运行,一般用于Linux运维(云计算)
Shell是一个用C语言编写的程序,可以通过shell进行操作系统的服务。
Shell Script 是一个脚本语言,跟java、php、python、scala一样,都有变量、方法、循环、数组,IO流都有。
a.sh 脚本
Linux中有多个shell解释器(类似于java JRE),可以通过一些命令查看有哪些解释器。
解释器中比较有名的是Bash,简单易用,免费,经常使用这个,Bash也是大多数Linux厂商使用的解释器。
二、shell解释器有哪些

三、shell文件格式
mkdir /home/scripts
touch 01.sh 创建一个文件
vi 01.sh 进行编辑
通过输入i 进行编辑
编辑的内容是:
#!/bin/bash
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
esc退出编辑,:wq! 进行保存
接着运行: /bin/bash 01.sh
我们也可以这样运行: /bin/sh 01.sh
在linux中脚本后缀名是 sh
windows 叫做 .bat

这种还是太麻烦了,最简单的执行命令应该是 ./01.sh
chmod +x 01.sh
赋完权限就可以执行了。

现在变成了可执行文件(绿色)

假如你在windows上编写了一个脚本,放入linux中运行,会报错:

原因是字符集问题:
在windows上可以编写,但是要注意是否为Unix编码:现在改成Unix格式,这样就可以执行了



四、shell语法
1 变量
写法:
your_name="laoyan" 这个中间不能有空格,变量名和等号之间不能有空格
命名规则:
1、只能是英文字母,数字,和下划线,首个字符不能是数字开头的。
2、中间不能有空格,可以有下划线 错误演示: user name="张三"
3、不能使用标点符号
4、不能使用关键字 bash中的关键字
所谓的脚本就是将我们经常使用的linux命令汇总在一个文件中而已

2 字符串(重要)
在我们的shell编程中,字符串可以使用单引号,双引号,也可以不用任何引号
单引号和双引号的区别:
看演示代码

获取字符串的长度:
skill="java"
echo ${#skill} 打印该字符串的长度
截取字符串演示:

反引号` 叫做命令替换:先执行反引号内部 ls /home/scripts
ls /home/scripts:列出 /home/scripts 目录下的文件
然后把ls执行得到的结果,交给echo打印出来
[root@bigdata01 scripts]# echo `ls /home/scripts`
001.sh 01.sh
3 参数
$0 表示当前运行的文件名字
$n 表示第n个参数
一定要写在双引号里面
#!/bin/bash
echo "查看shell脚本中的参数"
echo "目前正在执行的脚本的名字是:$0"
echo "获取到的第一个参数是:$1"
echo "获取到的第二个参数是:$2"
echo "获取到的第三个参数是:$3"
echo "获取到的第四个参数是:$4"

#!/bin/bash
echo "第一个参数是$1"
echo "总共有几个参数:$#"
echo "这些参数分别是什么:$*"
echo '验证是否可以使用单引号:$2'

$* 以字符串的形式展示所有的参数
$@ 拿到所有的参数,可以当做一个数组
#!/bin/bash
echo '------------展示$*-------------'
for i in "$*";do
echo $i
done
#!/bin/bash
echo '------------展示$@--------------'
for i in "$@";do
echo $i
done

4 运算符
shell和其他的编程一样,是支持运算的,我们可以借助 expr 这个表达式工具完成,数据之间的加减乘除运算。


bash中也可以不使用expr 进行运算
可以使用(()) $(()) $[] 进行算数运算
((a++)) 可以执行类似于这样的运算
将两个值进行运算 $((3 + 5))
a=2
b=3
$((a + b)) // 可以
$(($a + $b)) //也可以


结论就是 当两个变量想进行运算时 ,使用 $[a+b]
5 流程控制 (if else switch)
if语句的语法:
if condition;then
command1
command2
...
commandN
fi
if else 的语法
if condition;then
command1
command2
...
commandN
else
command
fi
#!/bin/bash
a=20
if [ $a -gt 10 ];then
echo "a的值大于10"
fi
编写条件的时候,使用[] 里面的代码跟[] 之间有空格,否则报错!
#!/bin/bash
a=$1
if [ $a -gt 10 ];then
echo "a大于10"
else
echo "a 小于等于10"
fi
关系运算符的一些转换字符
|
运算符 |
说明 |
英文 |
举例 |
|
-eq |
检测两个数是否相等,相等返回 true。 |
equal |
[ b ] 返回 false。 |
|
-ne |
检测两个数是否不相等,不相等返回 true。 |
not equal |
[ b ] 返回 true。 |
|
-gt |
检测左边的数是否大于右边的,如果是,则返回 true。 |
greater than |
[ b ] 返回 false。 |
|
-lt |
检测左边的数是否小于右边的,如果是,则返回 true。 |
less than |
[ b ] 返回 true。 |
|
-ge |
检测左边的数是否大于等于右边的,如果是,则返回 true。 |
Greater than or equal to |
[ b ] 返回 false。 |
|
-le |
检测左边的数是否小于等于右边的,如果是,则返回 true。 |
Less than or equal to |
[ b ] 返回 true。 |
编写一个案例:
#!/bin/bash
a=$1
b=$2
if [ $a -gt $b ];then
echo "a大于b"
fi
if [ $a -lt $b ];then
echo "a 小于 b"
fi
if [ $a -eq $b ];then
echo "a等于b"
fi
-eq 只能比较数值类型,字符串类型比较使用 = 或者 ==
#!/bin/bash
name=$1
password=$2
if [ $name == 'root' ] && [ $password -eq 123456 ];then
echo "账号和密码正确"
else
echo "账号密码错误,请重试"
fi
6 读取控制台数据
read -p "请输入您的姓名:" name
echo $name
编写一个脚本,提示请输入用户名 ,请输入密码,假如用户名是root 密码是123456
提示登录成功,否则显示登录失败。
#!/bin/bash
read -p "请输入用户名:" name
read -p "请输入密码:" password
if [[ $name = 'root' && $password = '123456' ]]; then
echo "登录成功"
else
echo "登录失败"
fi
比较数字,使用 -eq
比较字符串 使用 = 或者 ==
假如有多个条件,使用 [[ ]]
7 一个脚本
每次都要创建一个新的文件,比较麻烦,而且每次都要写 #!/bin/bash 这句话
使用vim编辑器:
在/etc/vimrc文件结尾添加
autocmd BufNewFile *.sh exec ":call WESTOS()"
function WESTOS()
call append(0,"#!/bin/bash")
endfunction
autocmd BufNewfile * normal G
创建一个文件,自动添加 #!/bin/bash
vim 15.sh

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)