之前看的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》》】系统化整理大纲的更多相关文章

  1. (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用

    126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货 雷锋网 作者: 三川 2017-03-02 18:40:00 查看源网址 阅读数:66 如果你有非常大的决心从事深度学习,又不想在这一行打 ...

  2. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  3. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  4. 【资源】C++学习资料 - 逆天整理 - 精华无密版【最新】

    再失效就太无语了,链接都是多份的~~—————————————————基础——————————————C++环境搭建(全套)http://pan.baidu.com/s/1o6y0smY链接:http ...

  5. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  6. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  7. shell学习总结之自定义函数

    shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...

  8. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  9. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

随机推荐

  1. c语言bit倒置最好的算法-离msb-lsb至lsb-msb

    问题 什么是例如最好的算法,下面的转换? 0010 0000 => 0000 0100 从详细的转换MSB->LSB至LSB->MSB, 所有的Bit必须扭转,着.这并非字节顺序的交 ...

  2. Coverage数据构成

    一个Coverage数据由两个文件夹组成:一个文件夹用于存储空间几何信息,该文件夹的名称就是这个Coverage数据的名称(如下图的hnc):另一个文件夹的名字为info,它存储的为Coverage的 ...

  3. 一个简单的C++性能测试工具(ms级别)

    如何使用 #include "sperformance.h" #include <iostream> #include <boost/thread.hpp> ...

  4. VCL to UniGUI Migration Wizard

    Free Evaluation Edition of The Automatic Migration Scripting Wizard For Converting Legacy Delphi Cod ...

  5. [视频]mac系统下虚拟机parallels安装ubuntu 14.04视频教程

    此文是http://www.mr-wu.cn/install-ubuntu-14-04-on-parallels-for-mac/这篇博文的补充,为整个ubuntu 14.04安装过程的视频录像. m ...

  6. WPF图片放大后模糊的解决方法

    原文:WPF图片放大后模糊的解决方法 WPF中显示图片的方式很多,可以用Image控件来显示图像,或者直接设置一个控件的Background.图片的放大也很简单,直接设置显示图片的控件的Width和H ...

  7. WPF自定义控件 使用阿里巴巴图标

    原文:WPF自定义控件 使用阿里巴巴图标 上一篇介绍了 WPF自定义控件 按钮 的初步使用,在进一步介绍WPF自定义控件 按钮之前,先介绍一下如何在WPF项目中使用阿里巴巴图标,方便以后做示例. 1. ...

  8. cocos2d 滚动背景 举 无限

    void Bird::update(float time){ auto bg=this->getChildByTag(200); auto bg1=this->getChildByTag( ...

  9. LeapMotion Demo3

    原文:LeapMotion Demo3   从Github及其他论坛下载一些LeapMotion的例子,部分例子由于SDK的更新有一些小Bug, 已修复,感兴趣的可以下载:       http:// ...

  10. wpf 快速建立可以拖动对象

    1.引用两个.net 程序集 2.xaml name space导入 xmlns:i ="http://schemas.microsoft.com/expression/2010/inter ...