之前看的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. Linux性能测试 netstat命令

    功能说明:Netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.语 法:netstat [-acCeFghilMnNoprstuvVwx][- ...

  2. 利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件

    虽说渐渐地Mac笔记本基本告别内置光驱时代了,随着网络的普及,使用到光驱的机会也渐少,但有时又难免需要光驱,比如二货出版社的随书光盘等…我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里 ...

  3. NYOJ 298 相变点(矩阵高速功率)

    点的变换 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 平面上有不超过10000个点.坐标都是已知的.如今可能对全部的点做下面几种操作: 平移一定距离(M),相对X ...

  4. SSM导出报表为csv文件

    报表导出思路为,在后台用iDataReader将查询得到的数据写进文件并压缩,向前端返回文件位置的链接,在前端执行下载操作. web端: 1. ajax请求url,将返回的路径json字符串解析并执行 ...

  5. EasyUI-DataGrid多线动态实现选择性合并

    jQuery EasyUI有一个非常易于使用的数据列表控件,这是DataGrid控制.某些背景json格式可以传递给在前景中显示的控制,很强大.只要有时需求须要这样即多行合并,如在列表中假设同样的部门 ...

  6. linq to entity DistinctBy && DefaultIfEmpty

    根据某属性去重 使用第三方库: https://github.com/morelinq/MoreLINQ Install-Package morelinq -Version 3.0.0 data.Di ...

  7. Win10《芒果TV》商店内测版更新至v3.1.6:率先支持Xbox One平台 - 参与反馈,赢取VIP奖励

    芒果TV For Win10商店内测版 v3.1.6 于2016年9月1日星期四下午正式登陆商店 主要是优化手机版视频下载相关设置.策略.风险提示,并升级兼容目标,率先支持Xbox One平台,覆盖更 ...

  8. 海康SDK编程指南

    转至心澄欲遣 目前使用的海康SDK包括IPC_SDK(硬件设备),Plat_SDK(平台),其中两套SDK都需单独调用海康播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息.本文仅对视 ...

  9. 2015元旦第一弹——WP8.1应用程序栏(C#后台代码编写)

    //第一次写博文,以后还请各位道友互相关照哈.废话不多说,直接进入正题. 相信大家对于如何在XAML添加应用程序栏应该很清楚,不清楚的话,可以打开新建个Pviot应用 就有系统自带的菜单栏. 本文主要 ...

  10. git + gerrit push 代码问题

    关于refs/for 和 refs/heads: 1.     这个不是git的规则,而是gerrit的规则, 2.     Branches, remote-tracking branches, a ...