linux高级编程四shell编程/指针

来源:互联网 发布:php广告任务网源码 编辑:程序博客网 时间:2024/05/21 17:20
================= 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);





















0 0
原创粉丝点击