shell编程
shell编程 对比 C编程
shell编程: (1.执行过程,2.开发效率,3.执行效率,4.移植性)
解释型语言
边翻译边执行 (ls cp(程序))
擅长文件处理,操作系统管理
开发效率高 cp 1 2
执行效率低
移植性好
.c:
编译型语言
先编译再执行 //gcc 编译 (.c ---> 机器代码)
擅长数据计算和数据处理
开发效率低
执行效率高
移植性差
shell脚本编程
shell脚本编写
1.shell脚本编写流程:
1.vim XX.sh #!/bin/bash //编辑文件
2.编写脚本
3.chmod +x XX.sh //给执行权限
4. ./XX.sh //执行文件
文件类型 所属用户权限 所属组 其他人
- rw- rw- r--
//chmod - ls -l 权限位
chmod +x
chmod +777 1.sh
r w x - r w x - r w x
1 1 1 1 1 1 1 1 1
----- ----- -----
7 7 7
变量/分支语句/循环语句/
shell变量
1.环境变量: env
PATH:保存当前工作的默认路径
PWD :当前所在的工作路径
HOME:当前登录用户的家目录
...
HOME=/home/linux
PWD=/home/linux/2021code/shell/test_code
USER=linux
SHELL=/bin/bash
env
//引用环境变量:
$PATH
main(int argc,char* argv[]) // a.out 1 2
@argc --- 命令行参数的个数
@argv --- 命令行参数对应的数组的首地址
自定义的变量:
注意:
(1).shell中数据是弱类型,默认识别为字符串类型
(2).不需要先定义
(3).名字规则 ,遵循C的命名规则。 //(不要带空格)
不能带 $符号
[注]
给值的时候 等号两边不能有空格
var=123 (√)
var = 123 (x)
echo 等同于 printf功能
read --表示从键盘获取输入
shell脚本输入输出
read name
echo '$name'
$表示取变量的值
shell中的引号
"":打印字符串,遇到$变量($name)则打印变量中的值(name变量的值)
'':打印字符串,遇到$变量依然打印 $变量 (原样输出)
` `:将中间的字符串按照命令打印 (命令置换)
read
read从标准输入读入一行, 并赋值给后面的变量,其语法为:
read var
把读入的数据全部赋给var
read var1 var2 var3
把读入行中的第一个单词(word)赋给var1,
第二个单词赋给var2,
……把其余所有的词赋给最后一个变量.
如果执行read语句时标准输入无数据,
则程序在此停留等侯,
直到数据的到来或被终止运行。
//字符串不能进行运算,需要专门命令 expr
运算:
expr
expr
算术运算命令expr主要用于进行简单的整数运算,
#注意:
(1).符号两边要有空格
(2).注意对应的运算符是否需要转义
包括:
加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作。
例如:
$ expr 12 + 5 \* 3
27
$ expr 3 - 8 / 2
-1
$ num=9
$ sum=`expr $num \* 6 `
$ echo $sum
结果为54
分支语句:
//单分支
if [ $i -eq 10 -a $j -le 10 ]
then
.........................
fi
//双分支
if 条件
then
语句1
else
语句2
fi
//多分支
if 条件表达式
then
语句
elif [条件表达式] #else if (表达式)
then
语句
elif [条件表达式]
then
语句
else
语句
fi
//条件的生成 -- test的命令 //注意: test 执行结果为真 0
// 执行结果为假 1
man test
-a and &&
-o or ||
test -eq 相等
test 10 -eq $i
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
[ $i ge 0 -a $i lt 59 ]
//命令的写法
test 10 -eq $i
//中括号
[ $i -eq 10 ] //注意: 中括号里面,前后都要有空格。
test
-b 块设备文件 block test -b /dev/usb0 --- 硬盘
-c 字符设备文件 char --- 鼠标,键盘
-d 目录文件 directory
-f 普通文件 regular
-L 链接文件 link 类似 windows下的快捷方式
-S 套接字文件 socket (本地socket/网络socket )
-p 管道文件 pipe (管道) //进程的通信
case 语句
//shell
case $num in
9)语句
;; //C中的 --- break
8|6|5|4)语句
;; //C中的 break
7)语句
;;
*)语句 //default
;;
esac //esac --->case 反着写
for循环
while语句
do while
语法:((表达式1,表达式2…))
特点:
1、在双括号结构中,
所有表达式可以像c语言一样可以进行计算,
如:a++,b--等。
2、在双括号结构中,
所有变量可以不加入:“$”符号前缀。
如下所示:
-----------------------------------------------
#!/bin/bash
for name in "Tom" "Lily" "Kate"
do
echo $name
done
for ((i=0;i<=5;i++))
do
echo $i
done