Shell学习日志
本帖最后由 MFwxy 于 2020-12-1 23:42 编辑来源:
《Linux Shell 自动化运维(慕课版)》千锋教育高教产品研发部(中国工信出版集团 人民邮电出版社)——知识点
《shell脚本实战(第二版)》戴夫·泰勒,布兰登·佩里;门佳(译)(中国工信出版集团 人民邮电出版社)——代码
变量种类:
1. 环境变量
定义 —— export back_dir = /home/backup; export back_dir(转换自定义变量为环境变量)
使用 —— $变量名 or ${变量名}
2. 自定义变量
定义 —— 变量名 = 变量值
使用 —— $变量名
3. 位置变量
脚本后面的参数就是(a,b,c...)
./test.sh a b c...
//大于10——${10}
4. 预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上个后台进程的PID
$? 上个命令的返回值,0表示成功
赋值方式:
1. 直接赋值
a=3
2. 键盘输入赋值
read -p [提示]:[变量名]
3. 命令行参数赋值
./name.sh $1 $2
4. 命令输出结果赋值
cmd=`date + %F`
touch:
touch stu{1..4} && ls-->利用{ }有序序列批量创建文件
stu1,sut2...stu4
https://www.cnblogs.com/MineGi/p/12171457.html
https://www.cnblogs.com/MineGi/p/11124223.html
ls(英文全拼:list files):
查看当前文件夹文件列表
ls [-alrtAFR]
-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出
mkdir(英文全拼:make directory):
创建目录
mkdir [-p] dirName
-p 确保目录名称存在,不存在的就建一个。
运算:
1. expr
num1=10 && num2=20
expr $num1 + $num2
30
2. (()) or $(())
sum=$(($num1 + $num2))
3. [] or $[]
sum=$[$num1 + $num2]
4. let (低效)
sum=2
let sum=sum+8 //没let不会进行运算。
5. bc小数计算
"2*4" |bc
删除(都会删掉找到并比较的关键字符):
1. {变量名#关键字符}
变量内容从头开始,删除到第一个符合关键字符的字符为止
2. {变量名##关键字符}
变量内容从头开始,删除到最后一个符合关键字符的字符为止
3. {变量名%关键字符}
变量内容从尾开始,删除到第一个符合关键字符的字符为止
4. {变量名%%关键字符}
变量内容从尾开始,删除到最后一个符合关键字符的字符为止
替换:
1. ${变量名/旧字符串/新字符串}
变量内容里符合旧字符串的第一个“旧字符串”会被新字符串替代
2. ${变量名//旧字符串/新字符串}
变量内容里符合旧字符串的全部“旧字符串”会被新字符串替代
迭代:
${变量名-新的变量值}
如果变量名没有被赋值,那么使用新的变量值;若赋值了(包括空),则不代替。
自增跟 C\C++ 一样
符号:
# —— 注释行
; —— 命令分隔符。用于同一行两命令。(;;用于终止case)
. —— 等价于source命令,bash内建命令。也可用于文件名开头,将文件制成隐藏文件,ls也不会正常显示
: —— 等价于true
$ —— 变量替换或引用变量内容
() —— 子Shell中执行
(()) —— 数值比较,运算,支持正则。(( i=1;i<3;i++)) , ((command1 && command2))
$() —— 命令替换,如=>`command`
$(()) —— 支持运算,$(( 1+2 ))
{} —— 集合,可将命令与字符串隔开,{Num}%
${} —— 变量的引用
[] —— 文件测试,数值比较,文件比较,字符串比较,如[ -a ] 且,[ -o ] 或
[[]] —— 增加了对正则的支持,如[[ =~ ]]包含,[[ || ]] 或, [[ && ]]且
$[] —— 支持变量运算,如$[ 2**2 ]=>2^2 => $ [ var1**var2 ]
# ./01.sh —— 需要执行权限,在子Shell中执行
# bash sh —— 不需要执行权限,在子Shell中执行
# .01.sh —— 不需要执行权限,在当前Shell中执行
# source 01.sh —— 不需要执行权限,在当前Shell中执行
# sh -n 02.sh —— 仅调试 syntax error
sh -vx 02.sh —— 以调试方法执行,查询整个执行过程
我们通常会修改系统中的配置文件(eg: /etc/profile)的PATH等变量,使之在当前Shell中生效
chmod(英文全拼:change mode):
https://www.runoob.com/linux/linux-comm-chmod.html
chmod [-cfvR] [--help] [--version] mode file...
-------------------------------------end---------------------------------------------
不写那么详细了。。。像个沙比,我又不会看,写个索引的了。重点在手打代码和翻看熟悉知识点上。
先弃坑,这玩意儿在一定程度上影响我学习了。以后有机会再来吧。 {:10_254:}写的不错,拿走了
页:
[1]