1、特定开头,指明此shell使用哪个shell对其进行解释执行。
#!/bin/bash
2、shell脚本的执行
赋予权限 chmod +x xxx.sh 或者 chmod 755 xxx.sh
指定shell bash xxx.sh
使用"." 或者 “source”执行脚本 . xxx.sh 或者 source xxx.sh
3、交互式脚本,需要中途用户输入数据
read [ -p "描述字符串" ] 变量名
PS: 若使用-p参数时, 变量名要与前面的字符串至少一个空格,否则会发生错误。
=======
read -p "please input your name:” username
echo "hello , your name is $username"
=======
please input your name:erho
hello , your name is erho
4、变量的数值运算
1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;
常规情况下,shell脚本可以使用如“+” “-” “*” “/” “,” 等运算,但shell下的变量默认都是字符串,直接运算会发生错误。
这里需要declare命令,定义变量时将其声明为整形
$ num1=10
$ num2=120
$ num3=$num1+$num2
$ echo $num3
10+120
====
declare -i num3=$num1+$num2
echo $num3
130
5、脚本逻辑判断与表达式
test 条件 或 [ 条件 ]
test命令运算符详细列表
6、条件判断if语句
多重判断,嵌套判断
7、case命令
case 变量值 in
值 1 )
命令 1
;;
值 2 )
命令 2
;;
.......
*)
命令n
;;
esac
8、循环
bah 中 有三种循环,分别是 for 循环、while循环 和 until循环。
for 自定义变量 in 变量1 变量2 变量3 ......
do
命令
done
PS: 依次将变量1、变量2、变量3赋值给自定义变量执行 命令,直到变量列表全部赋值完毕。
while [ 条件 ]
do
命令
done
PS:当条件为真,执行命令,直到条件为假才退出循环
until [ 条件 ]
do
命令
done
PS:跟while恰好相反,当条件为假,执行命令,直到条件为真才退出循环
9、continue 语句 和 break 语句
以上两个都是为了跳出循环。
continue 作用是跳出本次循环,但还是接着执行当前的循环语句。
break 作用是跳出循环体,继续循环体后面的语句。
10、exit 命令
结束本脚本文件的运行,一般用于退出脚本时使用。
11、函数:主要是解决重复的代码
function 函数名 ()
{
命令 1
命令 2
}
#!/bin/bash
shopt -s extglob
rm -rvf bbb/!(ccc|ddd)
#!/bin/bash
2、shell脚本的执行
赋予权限 chmod +x xxx.sh 或者 chmod 755 xxx.sh
指定shell bash xxx.sh
使用"." 或者 “source”执行脚本 . xxx.sh 或者 source xxx.sh
3、交互式脚本,需要中途用户输入数据
read [ -p "描述字符串" ] 变量名
PS: 若使用-p参数时, 变量名要与前面的字符串至少一个空格,否则会发生错误。
=======
read -p "please input your name:” username
echo "hello , your name is $username"
=======
please input your name:erho
hello , your name is erho
4、变量的数值运算
1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;
常规情况下,shell脚本可以使用如“+” “-” “*” “/” “,” 等运算,但shell下的变量默认都是字符串,直接运算会发生错误。
这里需要declare命令,定义变量时将其声明为整形
$ num1=10
$ num2=120
$ num3=$num1+$num2
$ echo $num3
10+120
====
declare -i num3=$num1+$num2
echo $num3
130
5、脚本逻辑判断与表达式
test 条件 或 [ 条件 ]
test命令运算符详细列表
对字符串进行判断
|
运算结果
|
string1 = string2 | 判断string1是否等于string2,如果相等,返回真 |
string1 != string2 | 判断string1是否不等于string2,如果不等于,返回真 |
-z string | 判断string长度是否为零,如果为零,返回真 |
-n string | 判断string长度是否不为零,如果不为零,返回真 |
对整数进行判断
|
运算结果
|
int1 -eq int2 | 判断两个整数是否相等,如果相等,返回真 |
int1 -ne int2 | 判断两个整数是否不等,如果不等,返回真 |
int1 -gt int2 | 判断int1是否大于int2,如果大于,返回真 |
int1 -ge int2 | 判断int1是否大于等于int2,如果是,返回真 |
int1 -lt int2 | 判断int1是否小于int2,如果小于,返回真 |
int1 -le int2 | 判断int1是否小于等于int2,如果是,返回真 |
对文件存在或者类型进行判断
|
判断结果
|
-e | 判断文件是否存在,如果存在,返回真 |
-b | 判断文件是否是块设备文件,如果是,返回真 |
-c | 判断文件是否是字符设备文件,如果是,返回真 |
-f | 判断文件是否是个普通文件,如果是,返回真 |
-d | 判断文件是否是个目录,如果是,返回真 |
-L | 判断文件是否是个链接文件,如果是,返回真 |
对文件属性进行判断
|
判断结果
|
-s | 判断文件是否不是空白文件,如果不是,返回真 |
-r | 判断文件是否可读,如果是,返回真 |
-w | 判断文件是否可写,如果是,返回真 |
-x | 判断文件是否可执行,如果是,返回真 |
-u | 判断文件是否设置了SUID,如果是,返回真 |
-g | 判断文件是否设置了SGID,如果是,返回真 |
-k | 判断文件是否设置了sticky bit属性,如果是,返回真 |
两个文件的比较
|
判断结果
|
file1 -nt file2 | 判断file1是否比file2新,如果是,返回真 |
file1 -ot file2 | 判断file2是否比file1新,如果是,返回真 |
逻辑判断
|
判断结果
|
条件1 -a 条件2 | 当条件1和条件2同时为真时,返回真 |
条件1 -o 条件2 | 当条件1和条件2只要有一个为真,则返回真 |
! 条件1
| 当条件1为真时,返回假 |
6、条件判断if语句
if [ 条件 ] then 命令 1 命令 2 fi | if [ 条件 ]; then 命令 1 命令 2 fi |
空格 非常重要 | 如果写成一行,如上 |
多重判断,嵌套判断
if [ 条件 ]; then 命令 1 命令 2 ...... else 命令 3 命令 4 ...... fi | if [ 条件1 ]; then 命令 1 ...... elif [ 条件2 ]; then 命令 2 ...... elif [ 条件3 ]; then 命令 3 ...... else 命令 4 ...... fi | if [ 条件 ]; then if [ 条件 ]; then 命令 1 ...... else 命令 2 ...... fi else 命令 3 ...... fi |
7、case命令
case 变量值 in
值 1 )
命令 1
;;
值 2 )
命令 2
;;
.......
*)
命令n
;;
esac
8、循环
bah 中 有三种循环,分别是 for 循环、while循环 和 until循环。
for 自定义变量 in 变量1 变量2 变量3 ......
do
命令
done
PS: 依次将变量1、变量2、变量3赋值给自定义变量执行 命令,直到变量列表全部赋值完毕。
while [ 条件 ]
do
命令
done
PS:当条件为真,执行命令,直到条件为假才退出循环
until [ 条件 ]
do
命令
done
PS:跟while恰好相反,当条件为假,执行命令,直到条件为真才退出循环
9、continue 语句 和 break 语句
以上两个都是为了跳出循环。
continue 作用是跳出本次循环,但还是接着执行当前的循环语句。
break 作用是跳出循环体,继续循环体后面的语句。
10、exit 命令
结束本脚本文件的运行,一般用于退出脚本时使用。
11、函数:主要是解决重复的代码
function 函数名 ()
{
命令 1
命令 2
}
#!/bin/bash
shopt -s extglob
rm -rvf bbb/!(ccc|ddd)