目录
变量
shell变量
环境变量
预定义变量
位置变量
其他
管道与重定向
管道
重定向
shell脚本
分支结构
循环结构
数组
脚本实例
变量
shell变量
shell变量:shell程序在内存中存储数据的容器
shell变量的设置:color=red
将命令的结果赋值给shell变量
- 变量名=$(命令)
- 变量名=`命令`
shell变量的引用echo $color,echo ${color}
环境变量
env/export命令查看环境变量
export <变量名>:命令用于设置环境变量,使得这些变量可以在当前 shell 以及由这个 shell 启动的子 shell 和进程中被访问。
系统环境变量
/etc/profile、/etc/profile.d/*.sh、/etc/bashrc
PS1:存储命令行提示符
PS2:存储命令行换行符
PATH变量:存储系统命令所在的路径
PATH变量的设置:PATH=/home/bin:$PATH
用户自定义环境变量
~/.bash_profile、~/.bashrc
预定义变量
用来存储shell程序运行过程中的状态信息,$$进程号,$0进程名或者程序名称,$?上一个命令的返回值信息,$!最后一个后台进程的进程号
位置变量
$1,shift
$# 总共有几个参数
$*对应的是所有位置的参数值
管道与重定向
标准设备文件 | 文件目录 | 文件描述符 |
标准输入 | /dev/stdin | 0 |
标准输出 | /dev/stdout | 1 |
标准错误 | /dev/stderr | 2 |
管道
管道是命令间传递信息的设备,将前一个命令程序的输出传递给后一命令
|grep -v 表示反向筛选
标准错误不能通过管道传递,意味着标准错误信息不会被筛选
重定向
重定向是指将设备文件的信息保存到磁盘中
标准输出重定向:>覆盖 >>追加 或者 1>,1>>
标准出错重定向:2>覆盖,2>>追加
标准输入重定向:<
标准输入重定向之here document:eg:cat <<EOF
合并输出重定向:&>、&>>
shell脚本
./test.sh 真实执行,要求有权限
bash test.sh bash解释器直接运行
sh test.sh sh是bash的别名命令,可以加一些参数
. test.sh 当前shell执行test.sh文件内的命令
source test.sh source等效于.
分支结构
&& 前面的命令执行成功才会执行后面的命令
|| 前面的命令执行失败才会执行后面的命令
!对测试预计取反,注意要写在整个测试语句的前面
简单示例
#! /bin/bash
test -x testaaa.sh && echo "OK" || echo "fail"
&&多条件示例
#! /bin/bash
count=0
while [ -x $1 ] && [ $count -le 5 ]
do
echo 'running'
let count++
done
if else
#! /bin/bash
if [ -x $1 ]
then
echo "Ok"
elif [ -x $2 ];then
echo "$2 is executable"
else
echo "fail"
fi
case
#! /bin/bash
VALUE=$1
case $VALUE in
a)
echo "A";;
b)
echo "B";;
*)
echo "C";;
esac
循环结构
while
#! /bin/bash
count=0
while [ -x $1 ]
do
[ $count -ge 5 ] && break
echo "Running"
let count++
done
until
#! /bin/bash
count=0
until [ -x $1 ]
do
[ $count -ge 5 ] && break
echo "Running"
let count++
done
for in
#! /bin/bash
for item in aa bb cc dd
do
echo $item
done
数组
定义数组
myarr=(1 2 3)
myarr=("abc" "edf" "sss")
获取数组长度
${#myarr[*]}或${#myarr[@]}均可
读取某个下标的值
myarr_index2=${myarr[2]}
输出整个数组
echo ${myarr[*]}
脚本实例
输入一个整数,从这个整数开始,输出可以被3整除的数
#! /bin/bash
read -p "please input number" startNum
count=0
while [ $count -lt 10 ]
do
let Num2=$startNum%3
if [ $Num2 -eq 0 ]
then
echo $startNum
let count++
fi
let startNum++
done
$(cd "$(dirname $0)" && pwd) 获取当前执行文件的路径
dirname: 获取指定路径所在的目录 ,如 dirname /home/xu 结果为 /home
Linux:-e、-d、-f、-L、-r、-w、-x、-s、-h、 - 木东木容 - 博客园-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L filhttps://www.cnblogs.com/xwb583312435/p/9012946.html