Shell程序设计(Linux )

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

c语言:编译型语言

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

变量       

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

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

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

echo "\$0=$0"        shell脚本的名字
echo "\$#=$#"        传递给脚本的参数个数
echo "\$$=$$"        shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文件

echo "path=$PATH"    以冒号分隔的用来搜索命令的目录列表
echo "home=$HOME"    当前用户的家目录



//输出

$0=my.sh

$#=0

$$=6242

path=/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/stu/bin

home=/home/stu

#!/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

比较

#!/bin/bash
echo "input filename"
read line

if [ -d "$line" ]
then
    echo "$line is dirent"
elif [ -f "$line" ]
then
    echo "$line is file"
else
    echo "not find"
fi

控制结构 

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程序里面调脚本程序  创建一个子进程,在子进程里调用

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值