一  变量

声明变量: my_var='ddd'
使用变量: ${my_var}
设置为只读变量: readonly my_var
删除变量: unset my_var 注意只读变量不能被删除

变量类型:(3类)
  1) 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。
  2) 环境变量:所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候 shell 脚本也可以定义环境变量。
  3) shell变量:shell 变量是由 shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行。

二  字符串

字符串:单引号 或 双引号

字符串拼接:在新的字符串中直接拼接
字符串长度:${#my_var}
截取子字符串:${my_var:0:2}
查找字符: echo ·expr index "$my_var" d· (注:是反引号,不是单引号!!!)

三  数组

shell数组:只有一维,没有多维。不限定数组的大小。下标元素从0开始。
定义数组:数组名=(值1 值2 ... 值n) (注:也可以单独定义:array[0]=val0)
读取数组:${数组名[下标]}
数组长度:legnth=${#array_name[@]} 或 legnth=${#array_name[*]}
数组元素长度:legnth=${#array_name[n]}

四  shell 注释

单行:以#号开头
多行:没有多行注释。可以采取变通的方式达到目的;{} —— 定义函数的形式。

五  传递参数:$# (其中$0是执行的文件名)

参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程 ID 号
$! 后台运行的最后一个进程的 ID 号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 显示 Shell 使用的当前选项,与 set 命令功能相同。
$? 显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误。

注:如果参数个数超过10,加花括弧 ${10} 。

六  运算符

1. 算数运算符

比较两个数字是否相等用 == 。注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
2.关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
shell关系运算符不像其他编程语言,支持> < = ,它是采用字符表示的。如下:
运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。
3.布尔运算符
! 非 [ ! false ] 返回 true。
-o 或 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
4.逻辑运算符
&& 短路与
|| 短路或
5.字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":
运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为 0,为 0 返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为 0,不为 0 返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
============================
注意:比较两个数字是否相等采用两个等号 == ,比价字符串是否相等使用一个等号 = 。
============================
6.文件测试运算符可以对文件属性进行测试。

七  输入输出

1.等待输入[和用户交互],回显 (read命令)
read name
echo "${name} is just a test!"
2. 将结果输出到文件中
echo "it is just a test" > out.txt
结果会在当前目录下自动创建一个out.txt的文件,里面存储的是控制台的输出内容。
重定向命令列表如下:
命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
3.原样输出字符,不进行任何转义的技巧:使用单引号

八  流程控制

1.选择
① if condition
then
command1
command2
fi
② if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
========================================================
注意:if else 语句经常与 test 命令结合使用。如:
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
========================================================
③ case —— 对应其他语言中的switch语句
case 值 in
模式 1)
command1
command2
...
commandN
;;
模式 2)
command1
command2
...
commandN
;;
esac
注意:;;表示break的含义
2.循环
① for循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
② while
while condition
do
command
done
③ util循环 —— 对应其他语言中的do...while语句至少执行一次循环。
until condition
do
command
done

九  函数

定义:demoFunc(){echo "shell函数"}
调用:demoFunc

十  时间日期处理

echo `date`
echo `date +"%F %R:%S"` —— 输出当前日期和时间
更多日期时间处理方式可以查看 date --help

linux shell学习笔记的更多相关文章

  1. Linux Shell 学习笔记 一 目录结构

    以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin       存放普通用户使用的命令 /sbin     存放管理员可以执行的命令 /home   ...

  2. linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  3. Linux & Shell 学习笔记【1/2】

    因为工作上的需要,花了些许时间去熟悉学习Linux和Shell,现在也花点事件在此记录一下以加强巩固学习的内容吧.学的不算深入,所以都是一些比较junior的内容. 在下一篇随笔会详述之前写的一个用于 ...

  4. Linux Shell 学习笔记

    2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是 ...

  5. Linux Shell学习笔记:exit退出状态代码

    inux提供$?特殊变量来保存最后一条命令执行结束的退出状态.执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值. 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令 ...

  6. Linux Shell学习笔记(一)

    Shell,见名知意,就是一个作为用户与Linux OS间接口的程序,允许用户向OS输入需要执行的命令.Shell众多,这里只介绍Bash. 0)实验的Shell版本 显示shell版本: /bin/ ...

  7. linux shell 学习笔记--内部命令学习

    .基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...

  8. linux shell 学习笔记01

    1.命令历史记录history !$     :调用上一条命令的执行结果 !100   :运行history记录里的第100条命令 !ser   :调用以ser开头的最后一次执行的命令 ctrl+r  ...

  9. Linux Shell 学习笔记 00

    1.Bash = Bourne Again SHell 2.终端提示符: #普通用户 username@hostname$ #管理员用户 root@hostname# 3.shell脚本通常是一个以s ...

随机推荐

  1. RedHat5配置网卡

    RedHat5配置网卡过程: 1.vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.将hdcp修改成static 3.最后添加 IPADDR=192.168 ...

  2. 【转载】AngularJs 指令directive之controller,link,compile

    关于自定义指令的命名,你可以随便怎么起名字都行,官方是推荐用[命名空间-指令名称]这样的方式,像ng-controller.不过你可千万不要用 ng-前缀了,防止与系统自带的指令重名.另外一个需知道的 ...

  3. vi编辑器使用相关

    一.vi的使用 1.vi一共分为3种模式,分别是一般模式.编辑模式和命令行模式 2.一般模式:以vi打开一个文件就直接进入一般模式(也是默认的模式). 在这个模式下可以使用上下左右移动光标,还可以删除 ...

  4. CC3000 SPI接口编程介绍

    CC3000 SPI 操作: CC3000的SPI 是基于五根线CLCK,CSn,IRQ,MISO,MOSI:通信模式如下图: CLCK:时钟频率0-26M从主机到从机,提供SPI接口时钟 CSn:低 ...

  5. 不同操作系统上屏蔽oracle的操作系统认证方式

    windows系统上>如果不想用户通过操作系统验证方式登录,可以修改 sqlnet.ora文件,把 SQLNET.AUTHENTICATION_SERVICES=NTS 前面加#注释掉就可以了. ...

  6. 生成new, old的 shell script

    #!/bin/bash #usage: ./create_dts_diff_v2.x.sh path1 path2 __new_dir=$1 __old_dir=$2 #=============== ...

  7. 鼠标滚动事件兼容性 wheel、onwheel

    wheelEvent = "onwheel" in document.createElement("div") ? "wheel" : // ...

  8. Centreon插件nagvis

    ======================================= http://docs.nagvis.org/1.8/en_US/index.html https://document ...

  9. 通过Oracle补充日志,找到锁阻塞源头的SQL

    问题背景: 有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session.lock.transaction等视图仅能定位到会话)?或许有人会想有没有可能通过 ...

  10. POI中getLastRowNum() 和getLastCellNum()的区别

    hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1