首页 > 系统相关 >Shell学习笔记

Shell学习笔记

时间:2023-08-23 09:55:38浏览次数:32  
标签:www Shell elseecho fiif 笔记 echo 学习 参数 thenecho

#!/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

 

标签:www,Shell,elseecho,fiif,笔记,echo,学习,参数,thenecho
From: https://www.cnblogs.com/qxql2016/p/17650331.html

相关文章

  • Python基础入门学习笔记 023 递归:这帮小兔崽子
    坑爹的兔子斐波那契数列的迭代实现我们都知道兔子繁殖能力是惊人的,如下图: 我们可以用数学函数来定义: 课间练习:假设我们需要求出经历了20个月后,总共有多少对小兔崽子?(迭代 vs 递归)1deffab(n):2n1=13n2=14n3=156ifn<1:7......
  • Python基础入门学习笔记 015字符串:格式化
     字符串格式化符号含义 将ASCII码97对应的字符输出 格式化整数 格式化操作符辅助命令5表示输出为五位数Python的转义字符及其含义......
  • Python基础入门学习笔记 016 序列!序列!
    •列表、元组和字符串的共同点–都可以通过索引得到每一个元素–默认索引值总是从0开始–可以通过分片的方法得到一个范围内的元素的集合–有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)使用list方法 元组转换为列表 max()返回序列或者参数集合中的最大......
  • Python基础入门学习笔记 018 函数:灵活即强大
    形参和实参>>>defMyFirstFunction(name):'函数定义过程中的name是叫形参'#因为Ta只是一个形式,表示占据一个参数位置print('传递进来的'+name+'叫做实参,因为Ta是具体的参数值!')>>>MyFirstFunction('小甲鱼')传递进来的小甲鱼叫做实参,因为Ta是具体的参数值!关键字参数......
  • Python基础入门学习笔记 011列表:一个打了激素的数组2
    从列表中获取元素•跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意,列表索引值是从 0 开始的。 从列表删除元素 remove()函数表示从列表中删除某个元素 del()函数也表示从列表中删除某个元素 pop()函数从列表中取出最后一个元素列表分片(Slice)•......
  • 记笔记背单词网站开发记录1
    我开发了一个网站,用于背单词和记笔记,已经开发并使用几年了,不过一直都是在本地部署使用。使用中间断断续续增加了一些功能,其中笔记就是后来加上的。这两个主要功能我已经使用了几年了,觉得还是有点用处的,趁着最近买了一个服务器,将其部署了起来,供大家测试使用。我介绍下具体的功......
  • Python基础入门学习笔记 012列表:一个打了激素的数组3
    列表的一些常用操作符•比较操作符 •逻辑操作符 •连接操作符 •重复操作符 •成员关系操作符 关于分片“拷贝”概念的补充 >>>dir(list)可查看所有列表的操作函数 count()函数可计算列表中相同元素个数 index()函数可索引列表元素 reverse()将列......
  • Python基础入门学习笔记 008 了不起的分支和循环2
    •现在小甲鱼来考考大家:–按照100分制,90分以上成绩为A,80到90为B,60到80为C,60以下为D,写一个程序,当用户输入分数,自动转换为ABCD的形式打印。1score=int(input('请输入一个分数:'))2if100>=score>=90:3print('A')4elif90>score>=80:5print('B')......
  • Python基础入门学习笔记 009 了不起的分支和循环3
    while循环while条件:循环体for循环•虽然说Python是由C语言编写而来的,但是Ta的for循环跟C语言的for循环不太一样,Python的for循环显得更为智能和强大!•语法:for目标in表达式:循环体 每次取FishC中一个字符及空格输出range()函数•语法:range([strat],[stop]......
  • 析合树学习笔记
    前情回顾。因为学了PQ-Tree而zhy提起析合树与PQ-Tree类似的结构关系于是就去又看了下析合树。这个算法太有用了!至少比PQ-Tree有用多了!析合树是处理排列连续段问题的利器。其实还是没用对于一个排列的子区间,如果它的值域也是一段长度相同的区间的话就称为它是该排列的连......