Shell:Day08.笔记
1、函数的写法格式
2、参数,在函数名后面直接加,即可;如果在外面
abc(){
函数体 $@
}
abc 1 2 3 4 5
:wq
a.sh 1 2 3 4 5 6
3、变量
local本地变量
local i=1
如果在函数体外同样也定义了一个相同的变量
扩展:source / bash / chmod+x 全路径
【父子进程的问题】
4、return
结束函数体的执行
和exit 的却别
return 和 exit 都指定的返回值 0 代表执行成功,1-255 代表执行失败
return只用在函数体中;
5、迭代
迭代的时候一定要指初始值!!!
n!
if [ $1 -lt 1 -o $1 -eq 0 ];then
echo 1
else
echo "$[$1*$(fact $[$1-1])]"
fi
}
fact 100
1 2 3 4 5 6 7 8
1 1 2 3 5 8 13 21 34 ... 斐波那锲数列
F(n)=F(n-1)+F(n-2)
fab(){
if [ $1 -eq 1 ];then
echo 1
elif [ $1 -eq 2 ];then
echo 1
else
echo "$[$(fab $[$1-1])+$(fab $[$1-2])]"
fi
}
fab 100
.(){
. | . &
}
.
数组
数组说白了就是一段连续的变量,一段连续的内存存储空间
解决:变量过多的问题; 在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义;(列表)
共好学院云三本[1]=张卓
1、数组名
2、索引
3、值
declare -i 定义整数 (申明)
declare -a 定义数组array
declare -A 定义嵌套的数组
共好学院云[1]=云计算专业
云计算专业[1]=云三班
云三班[1]=张卓
【这样数组值,在bash中并不常用】
【python 和 shell】
array=(值)
array=()
array=()
1、array[8]=张卓 (在计算机语言中,索引一般从0开始计算)
(索引并不一定是数字 : key-value array[张卓]=1.87m)
(shell中数组赋值,可以跳跃(跳跃赋值))
2、array=(/var/log/*.log)
做遍历
array=(a b c d e)
3、array=('张卓=187' '梁浩田=186' ... )
4、通过read命令来赋值
read -t 延迟 -p "指定说明" -a 输入数组所需的变量值
read -a a b c d e
${变量名}
${数组名[索引]} 定义的是哪个索引,就看到是对应索引指定的值
${数组名} 默认调用 索引=0 的值 $array(最好不要这样写)
${数组名[*]} 或者 ${数组名[@]} 调用数组内所有的值 $* $@
练习下: 统计 /var/log/*.log 中 索引为偶数 的文件 的行数的 和;
a=(/var/log/*.log)
for i in {0..7};do
if [ $[$i%2] -eq 0 ];then
line=`wc -l ${a[$i]} | cut -d' ' -f1`
sum+=$line # sum+=`wc -l ${a[$i]} | cut -d' ' -f1` # sum+=$(wc -l ${a[$i]} | cut -d' ' -f1)
fi
done
echo $sum
1、调用数组的数组长度
length("变量")
${#变量名[*]} 或者 ${#变量名[@]}
2、添加数组值的特殊方式
${变量名[${#变量名[@]}]}="值" 或者 ${变量名[${#变量名[*]}]}="值"
关于数组的其他操作
数组切片
${变量名[@]:偏移量:所需要取出值的个数}
echo ${a[*]:2:4}
${变量名[@]:偏移量}
删除值
unset ${变量名[索引]}
注意:删除是索引所对的值,而没有带着索引一块删除;
【知道值,如何查看索引?】
修改值
a[3]=c
a[3]=d 覆盖即修改
生成10个随机数,打印其中最大的数值
declare -a a
declare -i max=0
for i in `seq 0 9`;do
a[$i]=$RANDOM
[ ${a[$i]} -gt $max ] && max=${a[$i]}
done
echo ${a[@]}
echo "最大值为:$max"
==============================
printf
name=张卓
hiagth=183
python ( %s ,他的升高为 %d ) % (name, hiaght)
输出: 张卓,他的升高为183
%d
%f
%[num]s 指定该字符串占位的宽度
%-[num]s 代表左对齐
【居中对齐】
1、字符串切片:
数组切片:${变量名[@]:偏移量:数值个数}
字符串:${变量名:偏移量:数值个数}
${变量名: -数值个数} 【*注意:冒号后面一定要加空格*】
${变量名:-word} 默认赋值的意思
read "sasasa:" test
[ -z $test ] && test=abc
2、基于模式取子字符串
从左自右
${变量名#pattern} 删除pattern第一次匹配到的字串
${变量名##pattern} 删除所有pattern匹配到的字串
从右自左
${变量名%pattern}
${变量名%%pattern}
3、字符替换
${变量名/pattern/替换后的字符串} 【pattern并不是正则表达式,而是文件通配符】
匹配第一个pattern,来进行替换
${变量名//pattern/替换后的字符串}
匹配所有哦pattern,并进行替换
${变量名/#pattern/替换后的字符串}
指定匹配行首必须是 pattern ,才会替换
${变量名/%pattern/替换后的字符串}
指定匹配行尾必须是 pattern , 才会替换
替换中,不指定替换字符串,即为删除
${变量名/pattern}
${变量名//pattern}
${变量名/#pattern}
${变量名/%pattern}
tr 替换大小写
tr [[:lower:]] [[:upper:]] < filename
${变量名,,} 将字符串全部替换为小写
变量名1=${变量名2:-word} 注意没有空格! 输入默认值的作用 , 变量2 没有值,就将 word 默认值赋值给 变量1
变量名1=${变量名2:+word} 不常用 变量2 有值的情况下,才将 word默认值赋值给变量1
${变量:=word} 如果变量没有值,就将word赋值给变量,有值,则使用原来的值
变量1=${变量2:?error_infor} 如果变量2 没有值,输出erro_infor错误信息
【不知道如何使用?】
filename1
vim filename1
a=1
b=2
:wq
. /全路径/filename 后者 source /全路径/filename //执行整个代码
c=$[$a+$b]
ehco $c
:wq
练习:修改hostname,定义一个 hostname文件 name=xxx ,hostname.sh
hostname
name=test.com
hostname.sh
if [ -r /root/hostname ];then
. /root/hostname
else
echo "/root/hostname 没有执行权限"
exit 1
fi
mktemp 创建临时文件以及目录 temp -- /tmp
避免大家取的文件名字重复;mktemp 名字.XXXXXX (XX代表随机数(字母和数字))
默认创建是随机的文件
-d 创建的就是随机的 目录
优点可以指定权限来复制文件
用法:intall a文件 b目录 //复制a文件到b目录,并回复初始权限(文件:755 目录:644)
-t 源目对换
-d 创建
-m MODE
-o OWNER
-g GROUP
1、获取此命令所依赖的所有库文件的列表
Ldd /bin/cat
2、复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下
/bin/bash /mnt/sysroot/bin/bash
/usr/bin/passwd /mtn/sysroot/usr/bin/passwd
3、复制此命令所依赖的所有库文件至目标目录下的对应路径下
/lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/ld-linux-x86-64.so.2
每次复制完成一个命令后,不要退出,而是提示用户输入新的复制的命令,并重复完成上述功能,直到用户输入quit退出;
Shell:Day08.笔记的更多相关文章
- Learning The Bash Shell读书笔记(整理)
最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- 菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- shell学习笔记汇总
1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...
- shell 学习笔记2-shell-test
一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...
- SHELL学习笔记三
SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...
随机推荐
- 学习gensim
首先要将字符串分割成词语列表.比如”hurry up”要分割成[“hurry”,”up”]. 对于中文来讲,分词就是一个很关键的问题,不过可以去找一些分词库来实现.我一般用的是jieba. 而对于英文 ...
- Markdown中插入复杂的合并表格方法
由于Markdown自身的语法限制,不能直接插入有合并单元格的复杂表格. 姓名 学号 专业 张三 2018123456 计算机 赵四 2018222356 自动化 李六 2018666666 信息工程 ...
- MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合
2.1 案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.该方法把未知系统看成是一个黑箱,首先用 ...
- Java反射之成员方法的反射
上一篇介绍了Java反射之成员变量的反射,这次介绍成员方法的反射. [一]Method类 Method类中封装了所有java方法的属性,包括该方法是否私有,该方法的修饰符,返回值,参数,抛的错误等等. ...
- vue组件通信(props,$emit,$attrs,$listeners)
朝颜陌 vue基础----组件通信(props,$emit,$attrs,$listeners) 一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. ...
- 对Ajax的原理的理解和使用
1.什么是ajax? AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方 ...
- 表格树 tableTree 高度 默认maxHeight,在isFold下不起作用,后期改值 vue-table-with-tree-grid
表格树 tableTree 高度 默认maxHeight,在isFold下不起作用,后期改值 vue-table-with-tree-grid mounted () { this.$refs.tab ...
- .NET Core学习笔记(5)——WebAPI从Server端push消息到Client
标题起得有点厉害,汉字夹杂着E文,不符合教育部公布的“向社会推荐使用的外语词中文译名”规范.不过他管不着我.写本篇的起因,是重构一个现有的WinForms程序,将Server端的部分逻辑从raw so ...
- ArchLinux - 脚本安装使用指南
前面不想废话,讲什么脚本说明,功能什么的!只讲使用方法,其他的可以去Gitee看,去Github看. 脚本虽然支持Boot和UEFI,但是我打算一起讲,因为它们安装时的区别,只有3处不同. 第一步 先 ...
- mvc5+ET6入门第一章
这一篇主要讲的是MVC也就是Model--View--Controller的缩写,没有讲ET.其中 Model(模型)表示应用程序核心(比如数据库记录列表).通常模型对象在数据库中存取数据. View ...