Shell程序设计(Linux )

shell编程:解释型语言 ---- 运行时需要一个解释器来解释执行    (同为解释型语言的还有python)

c语言:编译型语言

shell是一个作为用户与Linux系统间接口的程序,他允许用户向操作系统输入需要执行的命令。

变量       

本地变量     环境变量     参数变量

在shell里,使用变量之前通常并不需要事先为他们做出声明,只是在给他们赋初值时来创建他们。

默认情况下,所有变量都被看做字符串并以字符串来存储。

#!/bin/bash       //使用该解释器

myvar="Hello World"
echo $myvar       //$  表示取myvar的值
echo "$myvar"     // "" 加双引号表示的同上
echo '$myvar'     //''单引号不会发生替换
echo \$myvar      //在$前面加\可以取消$的特殊含义
#!/bin/bash

fun()
{
    local mystr=hello
//只定义一个mystr是可以被该函数外部访问的,但是加上local就不可以。或者在函数结束加unset mystr

    echo "fun run"
    echo "\$#=$#"
    echo "\$1=$1"
    echo "\$2=$2"

    unset mystr
}

fun hello abc 1234
    echo "$mystr"
    echo "my.sh run"
    echo "\$#=$#"
    echo "\$1=$1"
    echo "\$2=$2"

运行shell程序的方法:

  1. bash my.sh
  2. chmod u+x my.sh (先改变权限)     ./my.sh

比较

控制结构 

if   elif     else    fi

#!/bin/bash
 
echo "stdin"        //手动输入
read line            //读取一行(读取输入的)

//下面就是if   else if    else  具体的应用
if [ "$line" = "3" ]
then
    echo "is 3"
elif [ "$line" = "1" ]
then
    echo "is 1"
else
   echo "no"
fi

 for    转自https://www.cnblogs.com/EasonJim/p/8315939.html

第一类:数字性循环
-----------------------------
for1-1.sh

#!/bin/bash  
  
for((i=1;i<=10;i++));  
do   
echo $(expr $i \* 3 + 1);  
done  
-----------------------------
for1-2.sh

#!/bin/bash  
  
for i in $(seq 1 10)  
do   
echo $(expr $i \* 3 + 1);  
done   
-----------------------------
for1-3.sh

#!/bin/bash  
  
for i in {1..10}  
do  
echo $(expr $i \* 3 + 1);  
done  
-----------------------------
for1-4.sh

#!/bin/bash  
  
awk 'BEGIN{for(i=1; i<=10; i++) print i}'  
第二类:字符性循环
-----------------------------
for2-1.sh

#!/bin/bash  
  
for i in `ls`;  
do   
echo $i is file name\! ;  
done   
-----------------------------
for2-2.sh

#!/bin/bash  
  
for i in $* ;  
do  
echo $i is input chart\! ;  
done  
-----------------------------
for2-3.sh

#!/bin/bash  
  
for i in f1 f2 f3 ;  
do  
echo $i is appoint ;  
done  
-----------------------------
for2-4.sh

复制代码
#!/bin/bash  
  
list="rootfs usr data data2"  
for i in $list;  
do  
echo $i is appoint ;  
done  
复制代码
第三类:路径查找
-----------------------------
for3-1.sh

#!/bin/bash  
  
for file in /proc/*;  
do  
echo $file is file path \! ;  
done  
-----------------------------
for3-2.sh

#!/bin/bash  
  
for file in $(ls *.sh)  
do  
echo $file is file path \! ;  
done  

while

#!/bin/bash
i=0
while [ : ]        //死循环
do
   printf "this is $i th\n"

   let "i+=1"
    if [ "$i" -eq "3" ]
    then
       break
    fi
done

case

#!/bin/bash
echo "stdin"
read line

while [ "$line" != "end" ]
do
   case "$line" in
       yes | y ) echo "this is yes" ;;
       no | n ) echo "this is no" ;;
       * ) echo "*****" ;;
    esac
    echo "stdin"
    read line
done

命令

  • break    跳出循环
  • :   相当于true的别名
  • continue  跳到下一次循环继续执行,循环变量取循环列表中的下一个值
  •  .    . ./shell   默认情况下,当一个脚本执行一条外部命令或脚本程序时,会创建一个新的环境,命令将在这个新的环境中执行。在命令执行完毕后,该环境被丢弃。但是,source命令和点命令在执行命令时,使用该脚本程序的同一个shell。
  • echo   输出结尾带有换行符的字符串
  • eval    允许你对参数进行求值,有点像一个额外的$,它给出一个变量的值的值。

  • exec  

  • exit n     使脚本程序以退出码n结束运行
  • export   将作为它参数的变量导出到子shell中,并使之在子shell中有效。
  • expr   将它的参数作为一个表达式来求值
  • 等等......  更多命令参考《Linux程序设计第4版》2.6.5

脚本里调用c程序,直接写 ./main         (main 函数名)

c程序里面调脚本程序  创建一个子进程,在子进程里调用

猜你喜欢

转载自blog.csdn.net/qq_42212982/article/details/84501134