目录 start
目录 end
|2018-06-21| 码云 | CSDN | OSChina
首先语法不像别的语言可读性好,比如Python,然后方言众多,学习比Python2,3还恶心
Shell 编程之语法基础 | Shell 编程之执行过程
Shell 教程
basepath=$(cd
dirname $0; pwd)
expr match "$i" ".*变更"
文件头部 #!/bin/sh
表示要使用sh解释器来执行, 可以替换成bash dash
./a.sh
或者绝对路径read answer
echo printf
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
yarn='\033[0;34m'
purple='\033[0;35m'
blue='\033[0;36m'
white='\033[0;37m'
default='\033[0m'
比Python的作用域更加恶心
# 实现了读取 A_host变量的值
perfix='A_'
name=${perfix}host
host=${!name}
${command}
echo ${command}|awk '{run=$0;system(run)}'
最好i=`expr $i + 1`;
expr $j + $k
expr $j -$k
expr $j \*$k
expr $j /$k
判断变量是否为数值
if [ "$1" -gt 0 ] 2>/dev/null ;then
echo "$1 is number."
else
echo 'no.'
fi
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string} 从左向右截取第一个string后的字符串
${varible%%string*} 从右向左截取最后一个string后的字符串
${varible%string*} 从右向左截取第一个string后的字符串
vars=${vars%%#*} # 截取#左边
vars=${vars#*cd} # 截取最左的cd的右边
vars=${vars%\'*} # 截取 右边引号 之左
获取命令的输出
使用 保存结果的变量名=需要执行的linux命令
这种方式来获取命令的输出时,注意的情况总结如下:
1)保证反单引号内的命令执行时成功的,也就是所命令执行后$?的输出必须是0,否则获取不到命令的输出
2)即便是命令的返回值是0,也需要保证结果是通过标准输出来输出的,而不是标准错误输出,否则需要重定向
因此我们推荐使用 保存结果的变量名=需要执行的linux命令 2>&1
的方式来获取命令的执行结果。
输出变量时: $var
会丢失换行和空格 "$var"
不会
字符串的包含问题
isGithub=`expr match "$line" ".*"$2`
# 简单的就是使用grep
isGithub=`echo $line | grep "github" `
# return 0 is $1 is substring of $2, otherwise 1
strIsSubstring(){
local x=1
case "$2" in
*$1*) x=0;;
esac
echo $x
}
求长 ${#var}
字符串拆分成数组
for element in $target
参考博客
命令行选项 参数处理
exit 0
basepath=$(cd \`dirname $0\`; pwd)
判断文件
文件 if [ -f path ]
链接 if [ -L path ]
目录 if [ -d path ]
整数比较
-eq
等于,如:if [ "$a" -eq "$b" ]-ne
不等于,如:if [ "$a" -ne "$b" ]-gt
大于,如:if [ "$a" -gt "$b" ]-ge
大于等于,如:if [ "$a" -ge "$b" ]-lt
小于,如:if [ "$a" -lt "$b" ]-le
小于等于,如:if [ "$a" -le "$b" ]大于
(需要双括号),如:(("$a" > "$b"))>=
大于等于(需要双括号),如:(("$a" >= "$b")) case $content in
-h|h)
echo "help"
;;
*)
echo "前面全部不匹配才会执行"
;;
esac
简易循环
for j in $(seq 1 5); do
echo $j
done
i=1
while [ "$i" -le 10 ];do
echo $i
i=$(($i+1))
done
Shell的函数只能返回整型数据类型
simple(){
echo "simple"
}
官方网址
sudo apt install jq 即可