“Linux-2020-spring-5-13”的版本间的差异

来自SUDA-HLT
跳到导航 跳到搜索
 
(未显示同一用户的15个中间版本)
第12行: 第12行:
 
     #!/bin/bash
 
     #!/bin/bash
 
     sum=0
 
     sum=0
−
     for((i=1;i<101;i=i+1)); do
+
     for ((i=1;i<101;i=i+1)); do
 
         sum=$(($i+$sum))
 
         sum=$(($i+$sum))
 
     done
 
     done
第26行: 第26行:
 
*“#!/bin/bash ”的作用
 
*“#!/bin/bash ”的作用
  
−
1、告诉shell文件类型,打开或解释或运行的方式
+
1、告诉shell这个文件要用什么命令打开,进而解释(或运行)
  
−
2、告诉shell用那种shell运行文件。
+
2、告诉shell用哪种shell(bash/csh/sh/ksh...)运行文件。
  
 
PATH环境变量,不建议将当前目录'.'放到PATH中
 
PATH环境变量,不建议将当前目录'.'放到PATH中
第34行: 第34行:
 
和awk是类似的
 
和awk是类似的
  
 +
== shell中函数的定义和使用==
  
−
== shell中函数的定义和使用==
+
函数传参
−
  函数传参
 
 
   $# -----参数的个数
 
   $# -----参数的个数
 
   $* -----字串
 
   $* -----字串
第43行: 第43行:
 
   $@ -----数组
 
   $@ -----数组
 
   $? -----获取返回值
 
   $? -----获取返回值
 +
 +
<nowiki>
 +
#!/bin/bash  # 注意视频中写错了,少了感叹号!
 +
function sum() {
 +
  echo $#
 +
  echo $*
 +
  echo $0
 +
  echo $1
 +
}
 +
 +
sum 1 2 7 'a'  # 注意函数调用,不要括号
 +
</nowiki>
 +
 +
=== 函数返回值 ===
 +
 +
[http://c.biancheng.net/view/2863.html 随便找到的一个网址]
 +
 +
Shell 函数的返回值(return语句)只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。
 +
 +
如果函数体中没有 return 语句,那么使用默认的退出状态,也就是最后一条命令的退出状态。如果这就是你想要的,那么更加严谨的写法为:
 +
return $?
 +
 +
$?是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值
 +
 +
=== 函数的运算结果如何保存下来 ===
 +
 +
通过return不可以
 +
 +
存到全局变量
 +
 +
shell很简单、很笨,语法更简单
 +
 +
徐嘉诚同学找到的第三种做法:
 +
    http://tldp.org/LDP/abs/html/assortedtips.html#RVT
 +
    函数最后echo $result
 +
    result=`function_name`
 +
 +
=== 局部变量 vs. 全局变量 ===
 +
 +
shell有没有这个概念?
 +
 +
函数内部定义的变量的生命周期是多少
 +
 +
=== 如何传递数组变量作为参数 ===
  
 
== 命令行参数 ==
 
== 命令行参数 ==
  
−
    $nohup bash run0.sh &:后台运行run0.sh
+
给shell脚本传递参数
 +
运行时指定shell脚本的命令行参数
 +
例如:./a.sh 'abc' 232
 +
类似于ls /bin
 +
C语言中是int main(int argc, char *argv[]),通过argc和argv来实现的。
 +
 
 +
 
 +
参数的含义(和函数参数是一致的)
 +
  $# -----参数的个数
 +
  $* -----字串
 +
  $0 -----第0个参数
 +
  $1 -----第1个参数
 +
  $@ -----数组
 +
  $? -----获取返回值
 +
 
 +
<nowiki>
 +
#!/bin/bash   # 注意视频中写错了,少了感叹号!
 +
# 假设这个shell脚本的文件名是:a.sh
 +
echo $#
 +
echo $*
 +
echo $@
 +
echo $0
 +
echo $1
 +
</nowiki>
 +
 
 +
执行过程:
 +
  $ ./a.sh 'abc' 123 93 -2 # 注意,'./a.sh'是第0个参数
  
 
== examples ==
 
== examples ==
−
1、[http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run0.sh run0.sh函数]
+
感兴趣的同学可以深入理解
−
2、[http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run1.sh run1.sh函数]
+
* [http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run0.sh run0.sh函数]
−
3、[http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run2.sh run2.sh函数]
+
* [http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run1.sh run1.sh函数]
−
4、[http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run3.sh run3.sh函数]
+
* [http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run2.sh run2.sh函数]
 +
* [http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run3.sh run3.sh函数]
  
 
== C语言中的多维矩阵(高效实现) ==
 
== C语言中的多维矩阵(高效实现) ==
 +
特别值得学习!我是从一本书上偶然看到的,然后用到我的代码上,把本来5000行的代码,简化到大概1500行,而且效率还有明显的提高,至少提高1倍。
  
 
[http://hlt.suda.edu.cn/index.php/Linux-2018-spring-main main.c函数]
 
[http://hlt.suda.edu.cn/index.php/Linux-2018-spring-main main.c函数]
 +
 +
 +
== 问题讨论 ==
 +
=== 字符串赋值 ===
 +
 +
周京晶同学的问题讨论
 +
  x='aaaa        bbbb'
 +
  echo $x  # 会合并空格
 +
  echo ${#x}
 +
  窦晨辉同学搞定:
 +
  是echo的问题,printf也一样,自作主张。
 +
  实际上字符串的长度没有改变

2023年5月8日 (一) 08:23的最新版本

复习并举例

  • shell中变量的定义
   注意变量两边不能有空格
  • 复杂语句
  • shell脚本(求和的例子)
    #!/bin/bash
    sum=0
    for ((i=1;i<101;i=i+1)); do
        sum=$(($i+$sum))
    done
    echo $sum

shell脚本的运行方式

1、bash x.sh

2、chmod +x x.sh

  ./x.sh
  • “#!/bin/bash ”的作用

1、告诉shell这个文件要用什么命令打开,进而解释(或运行)

2、告诉shell用哪种shell(bash/csh/sh/ksh...)运行文件。

PATH环境变量,不建议将当前目录'.'放到PATH中

和awk是类似的

shell中函数的定义和使用

函数传参

 $# -----参数的个数
 $* -----字串
 $0 -----第0个参数
 $1 -----第1个参数
 $@ -----数组
 $? -----获取返回值
#!/bin/bash   # 注意视频中写错了,少了感叹号!
function sum() {
  echo $#
  echo $*
  echo $0
  echo $1
}

sum 1 2 7 'a'   # 注意函数调用,不要括号

函数返回值

随便找到的一个网址

Shell 函数的返回值(return语句)只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

如果函数体中没有 return 语句,那么使用默认的退出状态,也就是最后一条命令的退出状态。如果这就是你想要的,那么更加严谨的写法为: return $?

$?是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值

函数的运算结果如何保存下来

通过return不可以

存到全局变量

shell很简单、很笨,语法更简单

徐嘉诚同学找到的第三种做法:

   http://tldp.org/LDP/abs/html/assortedtips.html#RVT
   函数最后echo $result
   result=`function_name`

局部变量 vs. 全局变量

shell有没有这个概念?

函数内部定义的变量的生命周期是多少

如何传递数组变量作为参数

命令行参数

给shell脚本传递参数 运行时指定shell脚本的命令行参数 例如:./a.sh 'abc' 232 类似于ls /bin C语言中是int main(int argc, char *argv[]),通过argc和argv来实现的。


参数的含义(和函数参数是一致的)

 $# -----参数的个数
 $* -----字串
 $0 -----第0个参数
 $1 -----第1个参数
 $@ -----数组
 $? -----获取返回值
#!/bin/bash   # 注意视频中写错了,少了感叹号!
# 假设这个shell脚本的文件名是:a.sh
echo $#
echo $*
echo $@
echo $0
echo $1

执行过程:

 $ ./a.sh 'abc' 123 93 -2 # 注意,'./a.sh'是第0个参数

examples

感兴趣的同学可以深入理解

C语言中的多维矩阵(高效实现)

特别值得学习!我是从一本书上偶然看到的,然后用到我的代码上,把本来5000行的代码,简化到大概1500行,而且效率还有明显的提高,至少提高1倍。

main.c函数


问题讨论

字符串赋值

周京晶同学的问题讨论

  x='aaaa        bbbb'
  echo $x  # 会合并空格
  echo ${#x}
  窦晨辉同学搞定:
  是echo的问题,printf也一样,自作主张。
  实际上字符串的长度没有改变