Shell脚本简介 — 持续更新

一、什么是Shell脚本

  1. Shell脚本是用户与Linux操作系统沟通的桥梁;
  2. Linux的Shell种类较多,因bash易用、免费,并且多数Linux系统默认的Shell是Bash。

二、Shell脚本文件格式

  • 文件名后缀通常是.sh
1 #!/bin/bash
2 #或者
3 #!/bin/sh

三、脚本任何执行?

  • a.sh  需保证脚本有执行权限并在环境变量中有(.),这样在执行时会从当前目录查找
  • ./a.sh  需保证脚本有执行权限
  • /usr/local/a.sh  需保证脚本有执行权限
  • bash a.sh  可直接执行,甚至脚本文件中不需引入/bin/bash,它将a.sh作为参数传给bash/sh命令来执行

四、变量

  • 变量不需要声明且初始化不需要指定类型
  • 变量命名要求:(1)、不能使用程序中的保留字;(2)、变量由字母、数字、下划线组成,且不能以数字开头;(3)、建议命令要通俗易懂
  • 显示变量值使用echo $变量名,也可使用${变量名}:如echo $JAVE_HOME 或 echo ${JAVA_HOME}
  1. 变量的分类:本地变量、环境变量、局部变量、位置变量、特殊变量

  (1)、本地变量

  • 只对当前shell进程有效,对当前进程的子进程及其他shell进程无效;
  • 定义:VAR_NAME=VALUE
  • 变量引用:${VAR_NAME}
  • 取消变量:unset VAR_NAME
  • 类比:相当于java中的私有变量,只能当前类使用,子类和其他类无法使用

  (2)、环境变量

  • 自定义的环境变量只对当前shell及其子shell进程有效,对其他shell进程无效
  • 定义:export VAR_NAME=VALUE
  • 对所有shell进程都有效则需要配置到/etc/profile文件中,并source /etc/profile使生效
  • 类比:相当于java中protected修饰符,对当前类和当前类的子孙类,以及同一个包下面可以共用

  (3)、局部变量

  • 在函数中调用,函数执行结束时变量会消失
  • 对shell脚本中某代码片段有效
  • 定义:local  VAR_NAME=VALUE
  • 相当于java代码某个方法中定义的变量,只对这个方法有效

  (4)、位置变量

  • $1,$2.....${n}
  • test.sh 20 30  —>$0:脚本自身;$1:脚本的第一个参数;$2:脚本的第二个参数
  • 相当于java main函数中的args参数,可以获取外部参数

  (5)、特殊变量

  • $?:接收上一条命令的返回状态码(取值区间:0~255)

  • $#:参数个数
  • $*或$@:所有的参数
  • $$:获取当前shell的进程号(可实现脚本自杀,或使用exit命令直接退出、或使用exit[num])

五、单引号、双引号、反引号

  • "        单引号不解析变量
  • ""       双引号会解析变量
  • ``  反引号是执行并引用一个命令的执行结果,类似于$(...)

六、for循环

格式1
for ((i=0;i<10;i++))
do
  ...
done

格式2
for i in 0 1 2 4 5  8 9 
do 
...
done

格式三
for i in {0..9}
do
  ...
done

 七、条件测试

  1. bash条件测试

命令执行成功与否即为条件测试
test EXPR
[ EXPR ]:注意中括号和表达式之间的空格

  2. 整型测试:

  -gt:大于:例如[ $num1 -gt $num2 ]或者test $num1 -gt $num2
  -lt:小于
  -ge:大于等于
  -le:小于等于
  -eq:等于
  -nq:不等于
  3. 字符串测试:
  > 大于[ "$str1" > "$str2" ] 注意测试符号左右的空格
  < 小于
  = 等于
  !=不等于

#!/bin/bash
while [ 1 -eq 1 ]
do

for ((i=0;i<10;i++))
do
if [ $i -eq 2 ]
then
break
fi
echo $i
done
echo '*********'
sleep 3
done
#!/bin/bash
while [ 1 -eq 1 ]
do

for ((i=0;i<10;i++))
do
if [ $i -eq 2 ]
then
#break 默认值为1,表示跳出第一层循环;值为2时,表示跳出第二层循环
break 2
fi
echo $i
done
echo '*********'
sleep 3
done

Linux 帮助命令

  • help/man
  • linux中的命令可以分为两种,内建命令:command is a shell builtin;外部命令:显示具体的路径
  • 如何区分命令属于哪一种:type command
  • 内建命令使用help command,外部命令使用man command
[xfvm@xfvm01 ~]$ type cd
cd is a shell builtin

 [xfvm@xfvm01 ~]$ type ls
 ls is aliased to `ls --color=auto'

  [xfvm@xfvm01 ~]$ type date

date is /bin/date
[xfvm@xfvm01 ~]$
原文地址:https://www.cnblogs.com/MrFee/p/xiaofei_shell1.html