文章目录
1、shell 编程
1.1 shell 定义
shell 是一个命令行的解释器,接受应用程序/用户命令,然后调用操作系统内核;
shell 可以是一个比较复杂的脚本,可以用一行行的命令,从而进行复杂的流程控制操作。
Shell 还是一个功能相当强大的编程语言,易于编写、易于调试、灵活性强。
查看Bash 命令支持的编译器
cat /etc/shells
查看默认的shell 编译器是什么
echo $SHELL
1.2 shell编程入门操作
#!/bin/sh
1.2.1 执行操作
bash 或者 sh +文件名从而进行执行操作
bash hello.sh
sh hello.sh
脚本的相对路径或者相对路径进行操作
如果直接不能够执行的话,那么我们需要对文件进行执行权限的的授权
chmod u+x ./scripts/hello.sh
然后采用相对路径或者绝对路径进行执行
./scripts/hello.sh
. 或者source 直接进行文件的执行操作
. hello.sh
source hello.sh
1.2.2 父子shell
ps -f 查看shell的个数
bash 新开一个shell操作
exit 退出子shell
1.3 变量
系统变量和自定义变量或者全局变量和局部变量操作、
1.3.1 系统变量
H O M E 、 HOME 、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER
echo $USER
env | less
printenv | less
set | less
printenv USER
env | grep my_variable
set | grep my_variable
撤销操作
unset my_variable
1.3.2 用户自定义变量
- 输出的时候必须$
- 赋值的时候没有空格
- “ ” 或者’ ’ 进行字符串的操作 (单引号只会原封不动的进行输出,但是双引号会当成变量进行输出操作)
- 小写操作
- readonly 定义只读变量
- 默认的都是字符串类型,无法直接进行数值计算操作
export my_varibale 将自定义变量转换成为全局变量,但是在子shell中进行修改,但是不影响父shell中的值
1.3.3 参数信息–特殊的变量
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
- $0,$1-9 位置参数
- $# 获取所有输入的参数的个数信息
- $* 把所有的输入当成一个一个参数信息
- $@ 可以采用循环进行访问
1.4 运算符操作
$[a+2]
$((a+2))
直接在shell中进行操作的话,会当成命令,那么会发生错误,但是可以采用
echo $[5+2]
expr 5 + 2
expr 5 - 2
expr 5 \* 2
add.sh
#!/bin/sh
s = $[$1+$2]
echo s= $s
1.5 条件表达式
$? 获取上一条语句的返回结果
- [ ]必须要空格操作
test condition
判断是不是相等和不相等操作
[ $a != Hello ]
echo $?
[ $a -lt 20 ]&& echo "$a <20" || echo "$a >=20"
1.6 流程控制操作
if else 的 […] 判断语句中大于使用 -gt,小于使用 -lt。
如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 > 和 <。
while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。
以上实例使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:https://www.runoob.com/linux/linux-comm-let.html
1.6.1 if else
# 第一种情况
if condition
then
command1
command2
...
commandN
fi
# 第二种情况
if condition
then
command1
command2
...
commandN
else
command
fi
# 第三种情况操作
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
1.6.2 for循环语句操作
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
for var in item1 item2 ... itemN; do command1; command2… done;
# 例子操作信息如下:
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
1.6.3 while 语句操作
while condition
do
command
done
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
1.7 shell 函数操作
-
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
-
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
#!/bin/bash # author:菜鸟教程 # url:www.runoob.com demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----"
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73