================= main 函数传参 ===================
1.int main(int argc, const char *argv[])
1.argc:给main函数传参字符串的个数
argv[0]:执行文件的名字
argv[1]:main函数传参中main函数后面的第一个字符串
...
================= shell 编程 ====================
一、shell
1.解释型语言:python、javascript、shell
适合对系统管理、维护
执行速度快
移植性比较好
开发效率低一些
一边编译一边执行
2.编译型语言:c、c++
适合进行数据计算
执行速度快
移植性稍弱
开发效率高
先编译再执行
二、shell编程
1.基本流程:
1.建立脚本文件:vi XXX.sh
2.授权:chmod +x XXX.sh
3.执行脚本:./XXX.sh
2.脚本内容:
1.所有的shell脚本在编辑的时候必须表名shell类型
一般开头声明:#!/bin/bash
2.shell当中语法没有数据类型,一切皆是字符串,语句后没有;号
3.shell变量
环境变量 ==> 当前shell的环境设置的一些变量
env ==> PATH PWD HOME...
自定义变量
a=1
使用变量
$a
位置变量
$0 脚本名称
$1 - $9 脚本参数
$# 脚本参数个数
$? 上次执行命令的返回值,成功返回0,失败返回非0
$$ 正在执行的shell进程的id号
3.shell中的引号
1." ":如果有字符串,字符串原样输出,如果有$变量则查看变量的值
2.' ':所有的字符无论是否有变量都原样输出
3.` `:在该引号包含的范围内部都按照命令执行
1 + 1 ==> `expr 1 + 1`
4.shell中的输入输出
1.输入 read 变量
2.输出 echo “ ”
练习:用read和echo完成两个变量的加减乘除
+ - \* /
5.shell语句结构
1.测试语句
test 变量 = 值 = : -eq
!= : -ne
> : -gt
< : -lt
>= : -ge
<= : -le
if [ $a -eq 100 ]
then
语句
else
语句
fi
练习:根据用户输入判断,如果存在该文件则将文件权限设置为只读,如果当前目 录下不存在则在上级目录下创建一个tmp目录,并在tmp目录中创建用户输入的文件 名称
-a -e :文件是否存在
练习:根据用户输入判断,输入文件到底是哪种文件类型
-b :文件是否是块设备文件
-c :文件是否是字符设备文件
-d :文件是否是目录文件
-f :文件是否是普通文件
-L :文件是否是连接文件
-S :文件是否是套接字文件
-p :文件是否是管道文件
2.多分支
case 字符串变量 in
模式1)命令名表
;;
模式2)命令名表
;;
...
*)命令名表
;;
esac
3.循环语句
1.for
for 变量名 in 单词表
do
语句
done
for i in `seq 10`
do
echo "$i"
done
for i in {1..10}
do
echo "$i"
done
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$i"
done
2.until
until [ $i -gt 10 ]
do
echo "$i"
done
3.while
while [ $i -le 10 ]
do
echo "$i"
done
4.exit
5.break
#!/bin/bash
for i in 1 2 3 4 5
do
for j in 1 2 3 4 5
do
if [ $j -eq 3 ]
then
break 2
fi
echo "----------"
done
echo "**********"
done
4.数组:
5.函数:
======================= 指针 ============================
1.指针和地址
2.一级指针和二级指针
int a = 10;
定义一个变量,并在内存当中开辟4个字节空间保存变量的值
int *p = &a;
定义一个指针变量,并在内存当中开辟4个字节空间保存变量的地址
int **q = &p;
定义一个指针变量,并在内存当中开辟4个字节空间保存指向变量的指针的地址
3.指针数组和数组指针
int a[3];
定义一个整型数组,并在内存当中开辟12个字节的空间保存变量的值
用来保存整型数据的数组
int *a[3];
int* a[3];
定义一个指针数组,并在内存当中开辟12个字节的空间保存指向变量的地址
用来保存指针的数组
int *a;
定义一个指针,并在内存当中开辟4个字节的空间保存指向变量的地址
指向整型变量的一个指针
int (*a)[3];
int[3] (*a);
定义一个指针,并在内存当中开辟4个字节的空间保存指向整型数组的地址
指向整型数组的一个指针
4.const 指针
const == 只读
1.const int *p;
int const *p;
p保存变量的地址可以修改 不能通过*p修改变量的值(p指针指向的变量的值不能修改)
2.int *const p;
p保存变量的地址不能修改(p在定义的时候必须初始化) *p的值可以改变
3.const int * const p;
int const * const p = &a;
p保存变量的地址不能修改(p在定义的时候必须初始化)也不能通过*p修改变量的值
5.char *p;
p + 1:向地址高的空间移动一个字节
int *p;
p + 1:向地址高的空间移动四个字节
6.void *p;
char *q;
int *s;
s = q;错
p = q;对
p = s;对
7.一维数组和二维数组
一维数组存储
二位数组存储
8.一维数组和指针的关系
int a[4];
int *p;
p = a = &a[0]
a[0] = *p = *a
p+1 = a+1 = &a[1]
a[1] = *(p+1) = *(a+1)
9.二维数组、二级指针和数组指针、指针数组的关系
1.行指针:在二位数组当中指向一行数据的指针
int *p = a[0];
p = a[0] = &a[0][0]
a[0][0] = *p = *a[0]
p+1 = a[0]+1 = &a[0][1]
a[0][1] = *(p+1) = *(a[0]+1)
int *q = a[1];
q = a[1] = &a[1][0]
a[1][0] = *q = *a[1]
q+1 = a[1]+1 = &a[1][1]
a[1][1] = *(q+1) = *(a[1]+1)
2.int a[2][3];
int (*p)[2] = a;
p = &a[0];
*p = a[0];
p+1 = &a[1];
*(p+1) = a[1];
二维数组a其实是一个数组指针
二维数组a不是一个指针数组
3.二级指针是一个指针数组
int main(int argc,const char** argv);
linux高级编程四shell编程/指针
最新推荐文章于 2021-12-31 20:37:04 发布