#!/bin/bash echo "Hello World!"
for i in $(ls /home);do echo $i done
name='zpb' str="Are you \"$name\"?" echo $str ${#name} #转义字符、字符长度
greeting='Are you ${name}?' echo $greeting echo ${greeting:0:5} #提取字符串
array=(0 1 2 3 4 5 6 7 8 9) value=${array[7]} echo $value echo ${array[@]} #获取整个数组
:<<'cmmt' #注释 babablabalala balabalabal baakd cmmt
echo -e "\nShell传参实例" echo "第一个参数:$1,第二个参数:$2" echo "参数个数:$#" echo "传递的参数作为一个字符串显示:$*"
echo -e "\nOK!" #显示换行 echo -c "\cOK!" #显示不换行 echo "脚本的进程号:$$" echo "后台运行的最后一个进程号:$!" echo "最后命令的退出状态:$?" echo '原样输出字符串:$name\"'
#声明一个关联数组site declare -A site site["google"]="www.google.com" site["runoob"]="www.runoob.com" site["taobao"]="www.taobao.com" echo "数组的键为:${!site[*]}或${!site[@]}" echo "数组的值为:${site[*]}" echo "数组的值为:${site[@]}" echo "数组元素个数为:${#site[*]}和${#site[@]}"
# $*和$@区别:都是引用所有参数字,前者等价于一个参数”1 2 3“,后者相当于”1“ ”2“ ”3“三个参数 echo -e "\n-- \$* 演示 ---" for i in "$*"; do echo $i done
echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done
echo -e "\n算数运算符:" val1=`expr $1 + $2` #表达式和运算符之间要有空格,例如 2+2 是不对的,完整的表达式要被``包含!!! val2=`expr $1 \* $2` echo "两数之积为:$val2 两数之和为: $val1"
echo -e "\n关系运算符:" a=10 b=20 result=$[a+b] # 注意等号两边不能有空格 echo "result 为: $result"
if [ $a -eq $b ] then echo "$a -eq $b: a ≠ b" else echo "$a -eq $b: a ≠ b" fi if [ $a -ne $b ] then echo "$a -ne $b: a ≠ b" else echo "$a -ne $b: a = b" fi if [ $a -gt $b ] then echo "$a -gt $b: a > b" else echo "$a -gt $b: a ≤ b" fi if [ $a -lt $b ] then echo "$a -lt $b: a < b" else echo "$a -lt $b: a ≥ b" fi if [ $a -ge $b ] then echo "$a -ge $b: a ≥ b" else echo "$a -ge $b: a < b" fi if [ $a -le $b ] then echo "$a -le $b: a ≤ b" else echo "$a -le $b: a > b" fi
if (( $a == $b )) then echo "a == b" elif (( $a > $b )) then echo "a > b" elif (( $a < $b )) then echo "a < b" else echo "没有符合的条件" fi
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
echo -e "\n布尔运算符:" if [ $a != $b ] then echo "$a != $b : a ≠ b" else echo "$a == $b: a = b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a<100 且 $b>15 : 返回 true" else echo "$a<100 且 $b>15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a<100 或 $b>100 : 返回 true" else echo "$a<100 或 $b>100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a<5 或 $b>100 : 返回 true" else echo "$a<5 或 $b>100 : 返回 false" fi
echo -e "\n逻辑运算符:" if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
echo -e "\n字符串运算符:" a="abc" b="efg"
if [ $a = $b ] # 等价于:if test $[a] -eq $[b] 或 if test $a = $b then echo "$a = $b : a = b" else echo "$a = $b: a ≠ b" fi if [ $a != $b ] then echo "$a != $b : a ≠ b" else echo "$a != $b: a = b" fi if [ -z $a ] then echo "-z $a : 字符串长度为 0" else echo "-z $a : 字符串长度不为 0" fi if [ -n "$a" ] # 等价于:if test -n "$a" then echo "-n $a : 字符串长度不为 0" else echo "-n $a : 字符串长度为 0" fi if [ $a ] then echo "$a : 字符串不为空" else echo "$a : 字符串为空" fi
echo -e "\n文件运算符:" file="/var/www/runoob/test.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi if [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi if [ -d $file ] # 等价于:if test -s $file then echo "文件是个目录" else echo "文件不是个目录" fi if [ -s $file ] # 等价于:if test -s $file then echo "文件不为空" else echo "文件为空" fi if [ -e $file ] # 等价于:if test -e $file then echo "文件存在" else echo "文件不存在" fi
printf "\n%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
echo -e "\nFor循环输出字符串:" for str in This is a string do echo $str done
int=1 while(( $int<=5 )) do echo $int let "int++" done
#until执行循环体直至条件为 true 时停止 #abc=0 #until [ ! $abc -lt 10 ] #do # echo $abc # a=`expr $abc + 1` #done
echo -e '\n\n输入 1 到 3 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; *) echo '你没有输入 1 到 3 之间的数字' ;; esac
while : do echo -n "输入 1 到 5 之间的数字:" # -n表示不在最后自动换行 read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done
echo -e "\n定义函数——加法器:" funWithReturn(){ echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !"
echo -e "\n函数参数:" funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第五个参数为 $5 !" echo "第十个参数为 $10 !" #当n>=10时,需要使用${n}来获取参数。 echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
#Shell文件包含 #test1.sh代码如下: url="http://www.runoob.com" #test2.sh代码如下: #. ./test1.sh echo -e "\n菜鸟教程官网地址:$url"
text="jiajieshixiaokouchangkai jiajieshixiangchijiuchi" echo $text > myfile #将name变量的值写入myfile中 echo `date` #显示命令执行结果
echo -e "\nwc -l命令计算Doc的行数:" wc -l << EOF 欢迎来到 菜鸟教程 www.runoob.com EOF echo -e "\ncat命令查看Doc内容:" cat << EOF 欢迎来到 菜鸟教程 www.runoob.com EOF
|
运行结果:
root@htxt:/home# ./status.sh 2 5 8 Hello World! admin bakup.sh bs_bbu_main file ip.sh myfile odiDebugCommand.txt revert.sh status.sh tcpdump_access.pcap tcpdump_dl.pcap tcpdump.pcap zzx Are you "zpb"? 3 Are you ${name}? Are y 7 0 1 2 3 4 5 6 7 8 9
Shell传参实例 第一个参数:2,第二个参数:5 参数个数:3 传递的参数作为一个字符串显示:2 5 8
OK! -c \cOK! 脚本的进程号:19044 后台运行的最后一个进程号: 最后命令的退出状态:0 原样输出字符串:$name\"
数组的键为:google runoob taobao或google runoob taobao
数组的值为:www.google.com www.runoob.com www.taobao.com 数组的值为:www.google.com www.runoob.com www.taobao.com 数组元素个数为:3和3
-- $* 演示 --- 2 5 8 -- $@ 演示 --- 2 5 8
算数运算符: 两数之积为:10 两数之和为: 7
关系运算符: result 为: 30 10 -eq 20: a ≠ b 10 -ne 20: a ≠ b 10 -gt 20: a ≤ b 10 -lt 20: a < b 10 -ge 20: a < b 10 -le 20: a ≤ b a < b 两个数字相等!
布尔运算符: 10 != 20 : a ≠ b 10<100 且 20>15 : 返回 true 10<100 或 20>100 : 返回 true 10<5 或 20>100 : 返回 false
逻辑运算符: 返回 false 返回 true
字符串运算符: abc = efg: a ≠ b abc != efg : a ≠ b -z abc : 字符串长度不为 0 -n abc : 字符串长度不为 0 abc : 字符串不为空
文件运算符:
文件不可读 文件不可写 文件不可执行 文件为特殊文件 文件不是个目录 文件为空 文件不存在
姓名 性别 体重kg
郭靖 男 66.12
For循环输出字符串: This is a string 1 2 3 4 5
输入 1 到 3 之间的数字: 你输入的数字为: 1 你选择了 1 输入 1 到 5 之间的数字:5 你输入的数字为 5! 输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:9 你输入的数字不是 1 到 5 之间的! 游戏结束
定义函数——加法器: 输入第一个数字: 23 输入第二个数字: 32 两个数字分别为 23 和 32 ! 输入的两个数字之和为 55 !
函数参数: 第一个参数为 1 ! 第二个参数为 2 ! 第五个参数为 5 ! 第十个参数为 10 ! 第十个参数为 34 ! 第十一个参数为 73 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
菜鸟教程官网地址:http://www.runoob.com 2023年 08月 23日 星期三 09:36:59 CST
wc -l命令计算Doc的行数: 3
cat命令查看Doc内容: 欢迎来到 菜鸟教程 www.runoob.com
|