shell脚本和浅谈C

来源:互联网 发布:小电影下载软件 编辑:程序博客网 时间:2024/06/18 18:50

1、Shell脚本怎么定义

答:shell为命令解析器,第一行固定的写法一般是#!/bin/sh 或 #!/bin/bash,其中脚本一般存放在/etc/rc中。

 

2、echo怎么输出一句话?

答:echo ${a}   或者echo $a

 

3、默认变量有哪些?

答:

$#  传入脚本命令行参数个数

$*  所有命令行的参数值,在各个数值之间留有空格

$0  命令本身shell文件名)

$1  第一个命令行参数

$2  第二个命令行参数

 

4、ne、eq、fi的用法?

答:

ne表示不等于

 

eq表示等于

 

fi表示判断结束

 

5、写test.sh脚本代码

#!/bin/bash

echo "HELLO TEST"

if [ $# -ne 3 ]; then

echo"Usage: $0 dirname1 dirname2 dirname3"

exit 1                     //定位出错

Elif[ $# -eq 3 ]; then

echo $1

echo $2

echo $3

echo $*

fi

for dir in $1 $2 $3

do

mkdir ${dir}

cd ${dir}

touch ${dir}.txt

echo "hello world" > ${dir}.txt

cd ..

done

后面看一下./test.sh a b c

 

6、ps -elf |grep test   //查看特定test的相关进程

 

7、kill -9 `ps -elf |grep test |awk{print $4}`

//杀死一组4的进程

 

8、“&&”和“||”的用法?

写代码例如1.sh

#!/bin/bash

folder=/home

[ -r "$folder" ] && echo "can read $folder"

[ -f "$folder" ] || echo "this is not file"

分析:

&&:若前面为真则后面运行

||:若前面为真则后面不运行

 

9、写代码case.sh

#!/bin/bash

read key

case ${key} in

[A-Z] ) echo "Uppercase Letter";;

[a-z] ) echo "Lowercase Letter";;

[0-9] ) echo "Nunber";;

* ) echo "Unknow";

Esac

分析:输入A-Z,a-z,0-9会显示不同的值。

 

10、编写sizeof求数据类型字节数程序

#include<stdio.h>int mian()

{

    printf("int %d\n",sizeof(int));

    printf("short %d\n",sizeof(short));

    printf("long %d\n",sizeof(long));

    printf("double %d\n",sizeof(double));

    printf("float %d\n",sizeof(float));

    printf("char %d\n",sizeof(char));

    printf("int * %d\n",sizeof(int *));

    printf("char *",sizeof(char *));

 

    return 0;

}

 

11、const和volatile的用法?

答:const.c

#include<stido.h>int main()

{

    const int cc = 3;   //cc只读变量,只能说明,不能通过cc这个变量修改对应的内存空间的值

 

    int *p = (int *)&cc;    //但是可以通过指针修改

    *p = 1;

    printf("%d\n",cc);

    return 0;

}

分析:

(关键字)volatile:防止编译时被优化

(关键字)const:修饰一个只读变量 

const int cc=3

cc是只读变量,只能说明,不能通过cc这个变量去修改其对应的内存空间的值。

const就近原则,靠近谁修饰谁。 
const int *p; 所指内容不能改变 
int * const p; 地址不能改变 
const int * const p; 都不能改变

 

12、(库函数)strlen:求字符串长度,遇到\0结束

答:编写strlen.c程序

#include<stdio.h>#include<string.h>int main()

{

    char a[1000];

    int i;

    for(i=0;i<1000;i++)

    {

        a[i]=-1-i;

        printf("%4d",a[i]);

    }

    printf("\nstrlen:%d\n",strlen(a));

    return 0;

}

分析:char占一个字节,8位,strlen遇到\0结束 
符号位为1表示负数,其余全1表示-1,其余全0表示负数最大值 
-7-1=-8 
-7的补码: 1001 
-1的补码: 1111 
相加结果:11000,前面越界舍去即1000是-8的补码 
负数补码的算法:从左往右第一个1保持不变,其余依次取反

 

13、题目一: 
int i = -20; 
unsigned int j = 10; 
i+j=?

答:

int i = -20;

unsigned int j = 10;if (i + j > 0)

    printf("big zero\n");else

printf("small zero\n");printf("i+j=%d\n",i+j); \\以带符号的十进制形式输出整数printf("i+j=%u\n",i+j):\\以无符号的十进制形式输出整数

分析:

往表示大的转换,这里有符号转换为无符号 
-20的补码: 1111 1111 1111 1111 1111 1111 1110 1100 
10的源反补一致: 0000 0000 0000 0000 0000 0000 0000 1010 
两数相加: 1111 1111 1111 1111 1111 1111 1111 0110 
该数无符号的十进制为:4294967286

 

14、题目二: 
unsigned int a = 3; 
unsigned int j; 
j = a *(-1); 
j?

答:

unsigned int a = 3;

unsigned int j;

j = a *(-1);if(j>0)

    printf("big zero\n");else

    ptintf("small zero\n");printf("j=%d\n",j);printf("j=%d\n",j);

分析: 
-1的补码: 1111 1111 1111 1111 1111 1111 1111 1111 
3的源反补一致:0000 0000 0000 0000 0000 0000 0000 0011 
两数相乘:1111 1111 1111 1111 1111 1111 1111 1101 
该数的无符号十进制表示:4294967293