一直学下 Shell脚本的,借鉴了很多大佬的脚本,靠着 Google 写「Ctrl+C / V」了个 Demo 出来。
直接放脚本,Mark一下防止以后忘记…
复制脚本内容,保存为 *.sh 文件,运行 bash *.sh 结合查看脚本的输出情况来理解命令更佳。
#!/bin/bash :<<EOF 这是多行注释区块 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 $? 上个命令的退出状态,或函数的返回值。 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 EOF str="frist shell script" #字符串拼接 echo "1:do u know this is my $str" #字符串长度 echo "2:${#str}" #提取子字符串 echo "3:${str:1:4}" #查找子字符串 查找字符 i 或 s 的位置(哪个字母先出现就计算哪个) echo "4:`expr index "$str" is`" #数组定义 array_test=(1 'A' 2 4) #获取数组元素值 echo "5:${array_test[0]}" echo "6:${array_test[1]}" echo "7:${array_test[*]}" echo "8:${array_test[@]}" #获取数组的长度 echo "9:${#array_test[@]}" #加法运算 val=`expr 2 + 2` echo "10:两数之和为 : $val" #在当前目录下生成log文件 log_path="test.log" echo "11:往当前目录下的log文件写入内容,如果文件不存在则自动创建。" #如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾 echo "It is a test" > $log_path #显示命令执行结果 echo "12:显示命令执行结果 ls" echo `ls` :<<EOF %s %c %d %f都是格式替代符 %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内 如果不足则自动以空格填充,超过也会将内容全部显示出来。 %-4.2f 指格式化为小数,其中.2指保留2位小数。 EOF #printf显示表格 echo -e "13:printf显示表格" printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用 echo -e "14:format-string 重用" printf "%s\n" abc df printf "%s %s %s\n" a b c d e f g h i j #if echo "14:if语句" a=102 b=101 if [ $a -eq $b ] then echo '两个数相等!' elif [ $a -gt $b ] then echo 'a大于b!' else echo 'a小于b!' fi a=101 b=101 if [[ $a > $b || $a == $b ]] then echo 'c大等于d' else echo 'c小于d' fi #字符串比较 c='sss' d='sss' if [[ $c == $d ]] then echo 'c和d相等!' else echo 'c和d不相等!' fi #for循环 echo -e "15:for循环输出数组内的所有元素" for vo in ${array_test[*]} do echo $vo done #while循环 echo -e "15:while循环输出数组内的所有元素" array_length=${#array_test[*]} temp=1 while [ $temp -lt $array_length ] do echo $temp let "temp++" done #until循环 #until 循环执行一系列命令直至条件为 true 时停止。 temp=1 echo "16:until循环输出数组内的所有元素" until [ $temp -eq $array_length ] do echo $temp let "temp++" done #读取用户输入 echo "17:读取用户输入" echo && read -e -p "请输入数字 [1-4]:" aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac #函数定义 调用 echo "18:函数定义 调用" demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----"