Shell是Linux系统的用户界面,它提供用户与内核的一种交互方式。它接收用户输入的命令,并把它送入内核去执行,是一个命令解释器;
Shell 既是一种命令语言,又是一种程序设计语言(Shell脚本)。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
Shell脚本就是将命令写入文本中,文本可以被执行。
脚本:本质是一个文件,文件里面存放的是特定格式的指令,系统可以使用脚本解析器翻译或解析指令并执行(它不需要编译)
1.shell编程和C的区别
shell编程:解释型语言,边翻译边执行,擅长文件处理,操作系统管理,开发效率高 cp 1 2,执行效率低,移植性好
.c:编译型语言,先编译再执行,擅长数据计算和数据处理,开发效率低,执行效率高,移植性差
在Linux上用的是Bash;
ls 是看文件名
ll 是看详细文件名,显示时间,大小,权限等
2.shell脚本编程
shell脚本的本质就是一系列shell命令的集合:
bash shell gnu,c shell csh,k shell ksh ash...
shell脚本编写流程:
(1)vim XX.sh #!/bin/bash
(2)编写脚本
(3)chmod +x XX.sh //+x或777给指行权限
(4)./XX.sh //执行文件
rwx——读写执行权限
R-x -wx r-x
101 010 101
5 3 5
chmod 535 xx.sh——取消-wx(写)的权限
shell变量
(1)环境变量(系统): env
PATH:保存当前工作的默认路径
PWD:当前所在的工作路径
HOME:当前登录用户的家目录
...
main(int argc,char* argv[ ])
(2)位置变量: ./3.sh /etc/passwd 123 456 内置变量
$0:脚本文件名,$1:传入脚本的第一个参数,$2:传入脚本的第二个参数,...,$9:
cp /etc/456 ./
$#:传入参数的个数,$?:上一句shell命令执行的结果,$$:当前shell的PID
a=123,命令行赋值两边不能空格
3.shell脚本输入输出
read a read是输入,类似于scanf,read后要加空格
echo '$a' echo是输出,类似于printf,echo后要加空格
a+b;
读变量时要加' $ ',写变量时不用加' $ '
4.引号的区别
" ":打印字符串,遇到$变量则打印变量中的值,如: a=123,echo "$a" 会输出$a
' ':打印字符串,遇到$变量依然打印$变量,如:a=123,echo "$a"会输出123
` `:将中间的字符串按照命令打印,如:a=`ls`,echo `$a`会输出ls命令执行的内容
5.运算符的使用
命令行使用' + ',' - ',' / '时可以直接写,两边要空格
使用' * '时,不能直接写,要写成' \* ',两边要空格,因为在命令行中' * '叫通配符
例:两个数加减乘除
6.分支结构
(1)单分支
if [ 条件判断式 ];
then
程序
fi
if [ 条件判断式 ]
then
程序
fi
(2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
then相当于是' { ',fi相当于是' } '
-gt是判断>,-eq是判断=,-lt是判断<,-le是判断<=,-ge是判断>=,-ne是判断!=;
cat 程序名:直接看程序的内容,不进人编辑界面
例:
test 判断条件真假,man test 看示例;
-a 表示and
-o 表示or
-b 块设备文件 test -b /dev/usb0
-c 字符设备文件
-d 目录文件
-f 普通文件
-L 链接文件
-S 套接字文件
-p 管道文件
case语句
‘ ;; ’相当于break
esac表示结束case语句
循环语句
while [ 条件 ]
for x in
until [ 条件 ]