今天分享的是Shell脚本编程的一些语法规则。
1、shell 命令分为内置命令和外部命令,通过type来判断
如:type cd type pwd type ifconfig
2、第一个shell脚本(编辑、保存、增加可执行权限、运行)
格式:
#!/bin/bash 指定shell脚本解释器
echo "hello,world" #具体命令
改权限:sudo chmod 777 hello.sh #最高权限
sudo chmod u+x hello.sh
3、shell的启动方式
(1)当做程序执行:./hello.sh
(2)指定解释器运行 /bin/bash hello.sh
(3)source source hello.sh
(4). . hello.sh
4、定义变量
variable=value 等号前后都不能有空格或者TAB
variable='value'
variable="value"
例
#! /bin/bash
var=1234
var2='123 456'
var3="123 456"
var4="${var3}aaa"
var5='${var3}aaa'
echo "$var"
echo "$var4"
echo "$var5"
单引号与双引号的区别是引用变量的时候会不会解析,
单引号原封不动的,双引号会解析。
5、将命令的结果赋值给变量
variable=`command`
variable=$(command)
#! /bin/bash
var=`pwd`
var2=$(pwd)
echo "$var"
echo "$var2"
6、删除变量
unset var
7、特殊变量
$0:当前脚本的文件名
$n(n>=1):传递给脚本或函数的参数,n是一个数字,表示第几个参数
例如第一个参数是1,第二个参数是2。
$#:传递给脚本或函数的参数个数
$*:传递给脚本或函数的所有参数
@:传递给脚本或函数的所有参数,当被双引号""包含时,
$?:上个命令的退出状态或者获取函数的返回值
$$:当前shell进程ID,对于Shell脚本,就是这些脚本所在进程的ID
8、字符串的拼接
var=$(pwd)aaa 并排放,直接加在后面
9、读取从键盘输入的数据
read a
read -p "提示信息" a
10、退出当前进程
exit
11、对整数进行数学运算,两个小括号
(())
例:
read -p "input a" a
read -p "input b" b
var=$((a+b))
echo "${var}"
12、逻辑与或 && ||
command1 && command2 当command1为假时才执行command2
command1 || command2 当command1为真时才执行command2
13、检测某个条件是否成立
test expression 和 [expression]
例:
read -p "input a" a
read -p "input b" b
test a -eq b || echo "a!=b"
或者:
[ a -eq b ] || echo "a!=b"
-eq:判断数值是否相等
-ne:判断数值是否不相等
-gt:判断数值是否大于
-lt:判断数值是否小于
-ge:判断数值是否大于等于
-le:判断数值是否小于等于
-z str:判断字符串str是否为空
-n str:判断字符串str是否为非空
=和==:判断字符串str是否相等
-d filename:判断文件是否存在,并且是否command1为目录文件
-f filename:判断文件是否存在,并且是否为普通文件
14、管道
command1 | command2
command1的输出会作为command2的输入,前提是command1执行正确
15、
(1)if 语句
if condition
then
statement
fi
(2)if else 语句
if condition1
then
statement
elif condition2
then
statement
...
else
statement
fi
(3)case in 语句
case expression in
pattern1)
statement
;;
pattern2)
statement
;;
...
*)
statement
esac
16、for in 循环
for variable in value_list
do
statement
done
value_list:
直接给出具体数值:for n in 1 2 3 4 5
给出一个取值范围:for n in {1..10}
使用命令的执行结果:for n in $(ls /bin/*sh)
使用Shell通配符:for n in $(ls /bin/*sh)
使用特殊变量:
for n in $*
for n in $@
for n in "$*"
for n in "$@"
17、while 循环
while condition
do
statement
done
例:
n=0
while (( n < 10))
do
echo "${n}"
n=$((n+1))
done
18、函数
function name()
{
statement
[return value]
}
例:
function my_name() #定义函数
{
echo "feige"
}
my_name #调用函数
19、环境变量
全部用户、全部进程共享的变量:/etc/bash.bashrc
一个用户、全部进程共享的变量:~/.bashrc
Shell启动方式对变量的影响
(1)子Shell进程中执行 /bin/bash 和 ./
(2)当前进程中执行 source 和 .
它们的区别是当使用unset 删除了变量之后,使用方式二执行脚本,还可以使用变量,但是使用方式一执行脚本,就不能再使用那个变量了。