“Linux-2020-spring-5-13”的版本间的差异
跳到导航
跳到搜索
(创建页面,内容为“== 复习并举例 == *shell中变量的定义 注意变量两边不能有空格 *复杂语句 *shell脚本(求和的例子) <nowiki> #!/bin/bash...”) |
(→字符串赋值) |
||
| (未显示同一用户的16个中间版本) | |||
| 第9行: | 第9行: | ||
*shell脚本(求和的例子) | *shell脚本(求和的例子) | ||
| − | <nowiki> | + | <nowiki> |
#!/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 | ||
echo $sum | echo $sum | ||
</nowiki> | </nowiki> | ||
| − | |||
| − | |||
== shell脚本的运行方式 == | == shell脚本的运行方式 == | ||
| 第28行: | 第26行: | ||
*“#!/bin/bash ”的作用 | *“#!/bin/bash ”的作用 | ||
| − | + | 1、告诉shell这个文件要用什么命令打开,进而解释(或运行) | |
| − | + | 2、告诉shell用哪种shell(bash/csh/sh/ksh...)运行文件。 | |
PATH环境变量,不建议将当前目录'.'放到PATH中 | PATH环境变量,不建议将当前目录'.'放到PATH中 | ||
| 第36行: | 第34行: | ||
和awk是类似的 | 和awk是类似的 | ||
| + | == shell中函数的定义和使用== | ||
| − | + | 函数传参 | |
| − | |||
$# -----参数的个数 | $# -----参数的个数 | ||
$* -----字串 | $* -----字串 | ||
| 第45行: | 第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有没有这个概念? | ||
| + | |||
| + | 函数内部定义的变量的生命周期是多少 | ||
| + | |||
| + | === 如何传递数组变量作为参数 === | ||
== 命令行参数 == | == 命令行参数 == | ||
| − | + | 给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 == | ||
| − | + | 感兴趣的同学可以深入理解 | |
| − | + | * [http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run0.sh run0.sh函数] | |
| − | + | * [http://hlt.suda.edu.cn/index.php/Linux-2018-spring-run1.sh run1.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倍。
问题讨论
字符串赋值
周京晶同学的问题讨论
x='aaaa bbbb'
echo $x # 会合并空格
echo ${#x}
窦晨辉同学搞定:
是echo的问题,printf也一样,自作主张。
实际上字符串的长度没有改变