【shell学习4》》】系统化整理大纲
之前看的runnoob整理,细节太多也没有系统起来,昨天公交上看了一些视频,略作总结:
标题零:学习基础
//创建文件
touch testVar.sh
//vim编辑内容
#!/bin/bash
vari="hello"
var1="my"
var2="pat"
//运行的两种方式
方式一:
root@ubuntu:~/shell# sh testVar.sh
root@ubuntu:~/shell# echo $var1
结果(空):
方式二
root@ubuntu:~/shell# . ./testVar.sh
root@ubuntu:~/shell# echo $var1
结果:my
区别:通过pstree命令查看bash进程
sh启动会新建一条bash进程,本bash进程无法取到结果
选择:通常运行直接sh,脚本相互调用时使用. ./
也可传参解决
标题一:变量定义
分为系统变量和用户自定义变量
a、
root@ubuntu:~/shell# va=`pwd`
root@ubuntu:~/shell# echo $va
/root/shell
b、
root@ubuntu:~/shell# va2=$(ll)
root@ubuntu:~/shell# echo $va2
total 12 drwxr-xr-x 2 root root 4096 Jun 22 19:11 ./ drwx------ 4 root root 4096 Jun 22 19:11 ../ -rw-r--r-- 1 root root 46 Jun 22 19:09 testVar.sh
1、系统内置变量
$HOME(主目录)\$PWD(当前运行的目录)\$SHELL(当前的解释器)\$USER(当前用户)等等。
使用set命令查看(各个发行版本命令有所区别)
2、用户自定义变量
1、变量名=变量值(=号两边不能有空格)
2、变量名一般都大写
3、双引号与单引号区别,双引号会将空格脱意,单引号会将所有特殊字符脱意($失去作用)
4、unset 变量名 删除变量
5、readonly A=1 声明静态变量A,不能unset,值也无法被改变
6、export 变量名,将变量提升为全局变量,可供其它shell使用
7、上一条命令的值赋值给变量:
3、系统特殊变量
$? 表示上一个命令退出状态(返回值?并非输出)
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 脚本中表示n位置的参数
内容:
#!/bin/bash
echo "param1 is $1"
echo "param2 is $2"
eg:
root@ubuntu:~/shell# sh testVar.sh aaa bbb
param1 is aaa
param2 is bbb
$# 表示变量个数,常用于循环(不常用)
$*、$@都表示参数列表(常用)
eg:
#!/bin/bash
echo "param1 is $1"
echo "param2 is $2"
echo '$* test'
echo $*
echo '$@ test'
echo $@
eg:
root@ubuntu:~/shell# sh testVar.sh aaa bbb
param1 is aaa
param2 is bbb
$* test
aaa bbb
$@ test
aaa bbb
eg:
!/bin/bash
echo "param1 is $1"
echo "param2 is $2"
echo '$* test'
echo $*
echo '$@ test'
echo $@
echo 'test for'
for X in $*
do
echo $X
done
eg:
root@ubuntu:~/shell# sh testVar.sh ccc ddd eee
param1 is ccc
param2 is ddd
$* test
ccc ddd eee
$@ test
ccc ddd eee
test for
ccc
ddd
eee
标题二:表达式与流程控制:
1、for
eg:
#!/bin/bash
for J in 1 2 3 4 5
do
echo $J
done
for J in 6 7 8 9 10;
do echo $J;
done
for J in {20..25};
do echo $J;
done
#!/bin/bash
for X in $*
do
echo $X
done
for((i=0;i<=5;i++))
do
echo $i
done
2、while
eg:
while [ 1 -gt 0 ]
do echo 11
done
while [ 1 -gt 0 ]; do echo 11; done
while (( 1<=1 )); do echo 11; done
root@ubuntu:~/shell# K=2
root@ubuntu:~/shell# while (( K<=10 )); do echo $K;let K++; done
3、case
eg:
#/bin/bash
MM=$1
case $MM in
tingting)
echo "to park"
;;
fangfang)
echo "to caffeBar"
;;
weiwei)
echo "to hotel"
;;
*)
echo "balabala~"
esac
root@ubuntu:~/shell# sh for.sh fangfang
to caffeBar
4、if
判断条件:
= 字符串对比
//数字
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
//其它
-r 有读的权限
-w 有写的权限
-x 有执行权限
-f 文件存在并且是个常规文件
-s 文件存在且不为空
-d 文件存在且是个目录
-b 文件存在并且是一个块设备
-L 文件存在且是一个链接
eg:
#/bin/bash
read -p "input you name :" NAME
if [ "$NAME" = "admin" ]
then
echo "1111"
elif [ "$NAME" = "root" ]
then
echo "2222"
else
echo "3333"
fi
//一般比对后面加一个x防止空
if [ "$basepath"x = "/usr/local/apache-tomcat-8.5.29"x ]
//条件满足后执行
[ condition ]&& echo ">>>>>>"
root@ubuntu:~/shell# [ 1 = 1 ]&&echo ">>"
>>
root@ubuntu:~/shell# [ "1" = "2" ]&&echo ">>"||echo "<<"
<<
标题三:运算符
格式 expr m + n 或 $((m+n))
eg(空格导致结果不同):
root@ubuntu:~/shell# S=`expr 1+2`
root@ubuntu:~/shell# echo $S
1+2
root@ubuntu:~/shell# S=`expr 1 + 2`
root@ubuntu:~/shell# echo $S
3
root@ubuntu:~/shell# S=$(((2+3)*4))
root@ubuntu:~/shell# echo $S
20
标题四:函数
三种声明方式
function fname(){}
function fname{}
fname(){}
返回值只能返回int(0-255)
返回值只能$?取
不能传参!
无返回值默认返回最后一句有效语句
先写后调用
标题五:调试
1\sh -vx aa.sh
2\脚本中添加 set -x
整理细节:
//线程等待
sleep 20
//展示所有进程
pstree
//显示系统中所有变量
set
//重新执行文件中所有export命令
source /etc/profile
//split字符串
root@ubuntu:~/shell# wc -c testVar.sh
46 testVar.sh
root@ubuntu:~/shell# wc -c testVar.sh | cut -d ' ' -f1
46
root@ubuntu:~/shell# wc -c testVar.sh | cut -d 'V' -f1
46 test
//引用变量
$PATH
//查看脚本的方法
echo $(截取语句)
//获取终端输入参数
read -p(提示语句) -m(字符个数) -t(等待时间)
root@ubuntu:~/shell# read -p "what is your name:" NAME
what is your name:asd
root@ubuntu:~/shell# echo $NAME
asd
【shell学习4》》】系统化整理大纲的更多相关文章
- (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用
126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货 雷锋网 作者: 三川 2017-03-02 18:40:00 查看源网址 阅读数:66 如果你有非常大的决心从事深度学习,又不想在这一行打 ...
- canvas学习之API整理笔记(二)
前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...
- 一份关于Swift语言学习资源的整理文件
一份关于Swift语言学习资源的整理文件 周银辉 在这里下载 https://github.com/ipader/SwiftGuide
- 【资源】C++学习资料 - 逆天整理 - 精华无密版【最新】
再失效就太无语了,链接都是多份的~~—————————————————基础——————————————C++环境搭建(全套)http://pan.baidu.com/s/1o6y0smY链接:http ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- shell学习总结之自定义函数
shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- 学习ReactNative笔记整理一___JavaScript基础
学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...
随机推荐
- NYOJ 24 素数的距离问题
素数的距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描写叙述 如今给出你一些数.要求你写出一个程序,输出这些整数相邻近期的素数,并输出其相距长度.假设左右有等距离长 ...
- WPF 实现测量显示文本长度
原文:WPF 实现测量显示文本长度 以工具类的方式实现: using System; using System.Windows; using System.Windows.Media; using S ...
- ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...
- 微软输入法TSF SampleIME 代码浅说
原文:微软输入法TSF SampleIME 代码浅说 微软提供了一个简单的TSF拼音输入法的示例SampleIME,主要的问题是:不支持数字键选候选字,不能自动上屏,没有联想功能.在笔者开发动态输入法 ...
- svm资料收集
向量点乘(内积)和叉乘(外积.向量积)概念及几何意义解读: https://blog.csdn.net/dcrmg/article/details/52416832 三角形余弦定理:https://z ...
- windows8运行zxing源码 生成与解码二维码 详解(含注释与图解可直接运行)
1 下载zxing2.1 2 本代码配置环境:eclipse.java1.6.windows8.zxing2.1 3 解压后将文件夹里面core/src下面的com文件夹导入到eclipse工程(工程 ...
- 用WPF实现在ListView中的鼠标悬停Tooltip显示
原文:用WPF实现在ListView中的鼠标悬停Tooltip显示 一.具体需求描述 在WPF下实现,当鼠标悬停在ListView中的某一元素的时候能弹出一个ToolTip以显示需要的信息. 二.代码 ...
- 1407251735-hd-美素数.cpp
#include<stdio.h> int s1[1005000],s2[1005000]; //如果main该阵列外部函数中定义,全局变量的数组,自己主动初始化数组0: //在main里 ...
- HDU 2845 Beans(dp)
Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled ...
- hibernate关于一对一注解配置
注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来 ...