Shell是一个命令行解释器,他接收应用程序/用户命令,然后调用操作系统内核
文件名以.sh结尾
# 运行脚本
bash xxx.sh
# 运行脚本
sh xxx.sh
脚本开头使用#!bin/bash指定命令行
使用ll命令查看文件的权限
使用chmod命令修改文件的权限
# 更改文件权限为rwxr-xr--
chmod 754 xxx.sh
拥有运行权限后,可以直接运行,不需要bash和sh命令
# 可以看到所有的函数和变量
set
# 可以使用全局变量
$HOME $USER
# 自定义变量赋值
变量名=值 a=2
# 输出a的值
echo $a
# 查找定义的变量
set | grep a
# 可以将变量变成全局变量
export 变量名
更改变量作用范围仅限当前bash极其子bash
# 声明变量
echo $new_var
# 撤销变量
unset 变量名
# 只读变量,不可更改
readonly b=3
$0表示脚本名字
$1到$9代表变量
$#变量个数
$*将所有参数变成一个
$@将所有参数变成一个集合
$[表达式]可以运算
$((表达式))可以运算
# 命令替换
$()和``(反引号)
用命令替换可以将结果运算赋值给变量
test condition
[ condition ](两边各有一个空格)
$?可以查看结果
# 举例[ -r hello.sh ],注意两侧各有一个空格
-r 读权限
-w 写权限
-x 运行权限
-e 文件存在
-d 文件存在并且是一个目录
-f 文件存在并且是一个常规的文件
&&表示前一条成功后再执行后面的
||表示前一条失败后再执行后面的
read -t 数字表示x秒后退出
read -p 表示提示性句子
# 条件判断语法
if [ $1 -lt 18 ]
then
echo 18
elif [ $1 -lt 35 ]
then
echo gt 25
else
echo "others"
fi
# case
case $1 in
1)
echo 1
;;
2)
echo 2
;;
*)
echo "others"
;;
esac
# for循环
sum=0
for((i=0;i<=100;i++))
do
sum=$[$sum+$i]
done
echo $sum
# while循环
sum=0
i=0
while [ $i -lt 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
# 输出时间戳
date +%s
# 输出文件名
basename xxx
# 将结果传给$0,去除后缀.sh
basename $0 .sh
# 输出相对路径
dirname xxx
# 输出绝对路径
echo $(cd $(dirname $0); pwd)
# 匹配指定字符xxx
grep xxx
# 一行的开头和结尾
^$
# 通配符
.
# 表示上一个字符的零次或多次
*
# 表示区间
# 1或者2
[1,2]
# 1到3
[1-3]
# a到c
[a-c]
# a到c,e到g
[a-c,e-g]
# 使用扩展正则
grep -E
cut命令
# awk命令
cat /etc/passwd | awk -F ":" '/^root/ {print $1","$6","$7}
cat /etc/passwd | awk -F ":" 'BEGIN{print "user,shell"}{print $1","$7} END{print "end of file"}'