Shell中的变量
 
Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量
系统变量:$HOME、$PWD、$SHELL、$USER等等

显示当前shell中所有变量  :    set

 

定义变量

•变量=值 (例如STR=abc)
•等号两侧不能有空格
•变量名称一般习惯为大写
•双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意

STR="hello world"

A=9

unset A 撤销变量 A

readonly B=2 声明静态的变量 B=2 ,不能 unset

export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用

将命令的返回值赋给变量
A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号
 
 
Shell中的特殊变量
•$? 表示上一个命令退出的状态
•$$ 表示当前进程编号
•$0 表示当前脚本名称
•$n 表示n位置的输入参数(n代表数字,n>=1)
•$#  表示参数的个数,常用于循环
•$*和$@ 都表示参数列表 
 
 
 
$*与$@区别
•$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1  $2  … $n 的形式输出所有参数
•当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
 
 

运算符

格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格
例如计算(2 +3 )×4 的值
 
1.分步计算

S=`expr 2 + 3`
  expr $S \* 4

2.一步完成计算

expr `expr 2 + 3 ` \* 4

echo `expr \`expr 2 + 3\` \* 4`

或 $(((2+3)*4))

 
for循环
•第一种:

for N in 1 2 3

do

echo $N

done

for N in 1 2 3; do echo $N; done

for N in {1..3}; do echo $N; done

 
•第二种:

for ((i = 0; i <= 5; i++))

do

echo "welcome $i times"

done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

 
 
while循环
•第一种

while expression

do

command

done

•第二种

i=1

while ((i<=3))

do

echo $i

let i++

done

 
 
case语句
•格式

case $1 in

start)

echo "starting"

;;

stop)

echo "stoping"

;;

*)

echo "Usage: {start|stop} “

esac

 
read命令
 
read -p(提示语句)-n(字符个数) -t(等待时间) 

read -p "please input your name: " NAME

 
if判断
•语法

if condition 
then 
    statements 
[elif condition 
    then statements. ..] 
[else 
    statements ] 
fi

例子

#!/bin/bash

read -p "please input your name:" NAME

#printf '%s\n' $NAME

if [ $NAME = root ]

then

echo "hello ${NAME},  welcome !"

elif [ $NAME = itcast ]

then

echo "hello ${NAME},  welcome !"

else

echo "SB, get out here !"

fi

 
判断语句
•[ condition ] (注意condition前后要有空格)

#非空返回true,可使用$?验证(0为true,>1为false)

[ mike ]

#空返回false

[  ]

l[ condition ] && echo OK || echo notok

条件满足,执行后面的语句

 
常用判断条件

=字符串比较

-lt小于

-le小于等于

-eq等于

-gt大于

-ge大于等于

-ne不等于

 

-r 有读的权限

-w 有写的权限

-x 有执行的权限

-f 文件存在并且是一个常规的文件

-s 文件存在且不为空

-d 文件存在并是一个目录

-b文件存在并且是一个块设备

-L文件存在并且是一个链接

 
 
Shell自定义函数
 
l语法

[ function ] funname [()]

{

action;

[return int;]

}

function start()  / function start / start()

•注意

1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译

2.函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

 
 
脚本调试
 
•sh -vx helloWorld.sh
•或者在脚本中增加set -x

最新文章

  1. hdu 1501 Zipper
  2. Java 反射工具类封装
  3. Java多线程2:Thread中的实例方法
  4. 使用SecureCRT连接ubuntu
  5. centos 忘记 root 密码
  6. VMware中linux与window目录共享
  7. 一个初学者的辛酸路程-python操作SQLAlchemy-13
  8. HBase常见问题答疑解惑【持续更新中】
  9. Google 内部代码是不支持异常(Excepton)的,C++ 异常的优劣之处有许多讨论(知乎上的讨论)
  10. win10释放的wifi热点手机连不上
  11. node note
  12. IIS 负载均衡
  13. spring 之 类型转换
  14. c++ stl源码剖析学习笔记(二)iterator
  15. J - Intersection
  16. mysql存储过程中使用游标
  17. 学JS的心路历程-JS支持面向对象?(一)
  18. headpq
  19. IDEA远程debug的使用
  20. r语言 function 指定多个返回值

热门文章

  1. Pycharm注册码最新版本2019激活码activation code + 最实用的激活方法(亲测有效)
  2. git+jenkins持续集成三-定时构建语法
  3. WordPress 通过文章 URL 获取文章 ID
  4. http的一些知识
  5. C# 泛型的入门理解(来自网络)
  6. MySQL的InnoDB的细粒度行锁,是它最吸引人的特性之一。
  7. Visual Studio调试技巧 -- Attach to Process
  8. Date()和new Date()区别
  9. Safari 11.0 已发布,新特性都在这儿了!
  10. 用dataset做数据源时,让gridview显示的列名与数据库表中的字段名不同