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