10.13 shell脚本

来源:互联网 发布:图片热点 js 编辑:程序博客网 时间:2024/05/29 02:09

                          shell 脚本

 

ls /:文件系统     ls /etc/rc    

ctrl + z :从前台切到后台              fg :从后台转到前台

Shell 是命令解析器,将用户的输入的指令变化为机器可以运行的程序

程序: 第一行固定 #!/bin/sh#!/bin/bash  

 如: #!/bin/sh

      #print hello world in the console window

      a=”hello world”

      echo $a (也可写成 echo ${a})

 

shell脚本中常用:$#传入脚本的命令行参数

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

                $0 命令本身(shell文件名)

                $1 第一个命令行参数

                $2 第二个命令行参数

 

1:想在一个文件夹中创建shell文件夹,shell里存放a b c, a b c里又分别存放a.txt b.txt c.txt

步骤: 1. mkdir shell    2.cd shell/   3.vim test.sh     4.chmod 777 test.sh

       5  ./test.sh a b c

程序: #!/bin/bash

echo "HELLO TEST"

 

if [ $# -ne 3 ]; then

        echo "Usage : $0 dirname1 dirname2 dirname3"

        exit 2

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

 

              

结果:    HELLO TEST

a

b

c

a b c

                            

> >>都是重定向符

echo xxx > 文件 第二次在执行的话 第二次的xxx会覆盖第一次的xxx内容,而>>不会覆盖。

 

 

2&&||

home目录下书写a.sh

程序:#!/bin/sh

a=/home

[ -r "$a" ] && echo "hhhh"

[ -f "$a" ] || echo "gggg"

最后./a.sh 结果为两句话都输出   "hhhh"

"gggg"

 

 

3:在home目录下书写b.sh 判断输入的是大写字母、小写字母、数字还是其他

#!/bin/bash

 

read b

 

case ${b} in

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

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

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

        * ) echo "Unknown";;

 

esac

 

 

Kill -9 `ps -elf | grep test | awk ‘{print $4}’`

这句语句意味着把`ps -elf | grep test | awk ‘{print $4}’`的结果作为kill -9的输入

c语言中 全为000000...000  结果表示0

           开头字符为1其余为01000...000结果表示为负数的最大值

 

 

4:计算int short double long char char*的长度

C语言中有32个关键字

sizeof: 是关键字,不是字符,意义是求这种类型的数据的长度。

strlen: 则是计算到\0为止,计算\0之前的长度。

 

#include<stdio.h>

int main()

{

 

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

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

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

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

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

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

 

return 0;

}

 

最后./1 得出结果:

int 4

short 2

double 8

long 4

char 1

char * 4

 

5:先猜测下列程序的值,在运行程序验证你的猜想

#include<stdio.h>

#include<string.h>

int main()

{

   char a[1000];

   int i;

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

   {

   a[i]=-1-i;

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

 

   }

printf("%d",strlen(a));

return 0;

}

 

最后./2得出结果为255

分析:可去掉程序中的// 打印出a[i]的值,可以明显得出第256位是0,而0经过转化就是\0strlen就是计算到\0为止,只计算之前的长度为255

 

思考题: unsigned int a=3;

         unsigned j;

         J=a*(-1)   计算结果

 

 

volatile const

volitile: 防止编译的时候被优化。

const:修饰一个只读变量。 如 const int cc=3   cc是只读变量。只能说明,不能通过cc这个变量去修改它对应内存空间的值。

面试题

const int *p        地址p指向的内容不可改变

int * const p        地址p不可改变

const int * const p   地址p和地址p指向的内容两者皆不可改变

 

原因是const 有就近原则,靠近谁就限制谁。

原创粉丝点击