Shell编程和Linux的高级命令
Shell编程:随时编写,随时调试,随时执行
1.Shell编写和执行
脚本格式:#!/bin.bash开头指定用bash来解释我们编写的shell脚本
脚本必须有可执行权限
脚本的常用执行方式
第一种:输入脚本的绝对路径或相对路径,第一行必须加上#!**/bin/**bash
[root@bd-offcn-01 ~]# /root/helloworld.sh
第二种:bash或sh+脚本(不用赋予脚本+x权限)第一行可以不加上#!**/bin/**bash,但是一般都加上
[root@bd-offcn-01 ~]# sh /root/helloworld.sh
2.变量
Linux Shell中的变量分为 系统变量和 用户自定义变量。
系统变量:HOME、HOME、HOME、PWD、SHELL、SHELL、SHELL、USER等等
显示当前shell中所有变量:set
2.1定义变量
基本语法:
a)定义变量:变量=值
b)撤销变量:unset 变量
c)声明静态变量:readonly变量 注意 不能unset
2.2将命令的返回值赋给变量
(1)A=ls -la
反引号,运行里面的命令,并把结果返回给变量A
(2)A=$(ls -la) 等价于反引号
2.3设置环境变量
在/etc/profille里设置环境变量
a) export 变量名=变量值 (功能描述:设置环境变量的值)
b) source 配置文件 (功能描述:让修改后的配置信息)
c) echo $变量名 (功能描述:查询环境变量的值)
2.4位置参数变量
$n: (0-9) $0代表命令本身,$1-9代表第一个到第九个参数,十个以上的参数9代表第一个到第九个参数,十个以上的参数9代表第一个到第九个参数,十个以上的参数{10}
$*: 把所有的参数当做一个整体进行输出
$@: 把所有的参数 一个一个的输出
$#: 这个变量代表命令行中所有参数的个数
2.5预定义变量
(1)$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
(2)$$:当前进程的进程号(PID)
(3)$!:后台运行的最后一个进程的进程号(PID))
3.运算符
3.1算数运算符
(1)A=$((1+1))
(2)A=$[1+1]
(3)A=expr 1 + 1
用*的时候的得转义 * 注意运算符2边得有空格
(4)let A=1+1
3.2关系运算符
(1)-eq 等于则为真 [ 10 -eq 20 ] 注意:前中括号后和后中括号前都得有空格
(2)-ne 不等于则为真 [ 10 -ne 20 ]
(3)-gt 大于则为真 [ 10 -gt 20 ]
(4)-lt 小于则为真 [ 10 -lt 20 ]
(5)-ge 大于等于则为真 [ 10 -ge 20 ]
(6)-le 小于等于则为真 [ 10 -le 20 ]
3.3布尔运算符
(1)! 非 [ ! 10 -eq 10 ]
(2)-a 与 [ 10 -eq 20 -a 90 -eq 90 ]
(3)-o 或 [ 10 -eq 20 -a 90 -eq 90 ]
3.4逻辑运算符
逻辑运算符主要用于判断要不要继续进行下一步,包括三个符号
(1)无条件继续执行符号,即分号 ;
(2)正确则继续执行符号,即&&
(3)错误则继续执行符号,即||
3.5字符串运算符
(1)= 检测两个字符串是否相等,相等返回true [ $a = $b]返回 false
(2)!= 检测两个字符串是否相等,不相等返回true [ $a != $b]
(3)-z 检测字符串长度是否为0,为0返回true [ -z $a ]返回 false
(4)-n 检测字符串长度是否为0,不为0返回true [ -n $a ]返回 true
(5)$ 检测字符串是否为空,不为空返回true [ $a ]返回 true
3.6文件测试运算符定义
运算符 | 说明 | 举例 |
---|---|---|
-d | 检测文件是否是目录,如果是,则返回true | [ -d $file ]返回返回 false |
-f | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true | [ -f $file ]返回返回 true |
-r | 检测文件是否可读,如果是,则返回 true | [ -r $file ] 返回返回 true |
-w | 检测文件是否可写,如果是,则返回true | [ -w $file ] 返回返回 true |
-x | 检测文件是否可执行,如果是,则返回true | [ -x $file ] 返回返回 true |
-s | 检测文件是否为空(文件大小是否大于0),不为空返回 true | [ -s $file ] 返回返回 true |
-e | 检测文件(包括目录)是否存在,如果是,则返回true | [ -e $file ] 返回返回 true |
4.条件运算符
1.[]
2.test
5.流程控制语句
5.1 if判断
A=100
B=200
if [ $A == $B ]
then
echo "A is equal to B "
elif [ $A -gt $B ]
then
echo "A is greater than B"
elif [ $A -lt $B ]
then
echo "A is less than B"
fi
5.2 case语句
case $1 in
"1")
echo 1
;;
"2")
echo 2
;;
"3")
echo 3
;;
*)
echo "other"
;;
esac
5.3 for循环
for有2种方式
第一种:
for i in "$*" //作为整体输出
do
echo "The number is $i"
done
for i in "$@" //一个一个输出
do
echo "the number is $i"
done
第二种:
#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo "$s"
5.4 while循环
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
5.5 until循环
#!/bin/bash
a=0
until [ ! $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
6.read
read -t 7 -p"请输入一个名字在7秒内" NAME
echo $NAME
7.函数
7.1系统函数
basename用于获取基本名称,basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
7.2自定义函数
fuction和sum后面的()可以选择删除其中之一
有2种方式返回结果:
第一种:用return返回值
#!/bin/bash
function sum()
{
s=0
s=$[ $1 + $2 ]
echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
第二种:用echo返回结果
#!/bin/bash
function sum()
{
s=0
s=$[ $1 + $2 ]
return $s
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
echo $?