shell的基础学习

本文围绕Shell脚本展开,介绍了变量定义、类型转换、数组操作、注释使用等基础内容,还阐述了脚本内获取参数的格式、中括号用法、各类运算符(算术、关系、布尔等),以及输入读取、结果定向、流程控制(if、for、while等)和函数定义调用等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/sh
echo “基础说明***********”
echo “1:一般使用双引号”
echo “2:一般使用$ {}”

echo “**********************************************************************”
echo “Step 1 --------------------------( ) ( ) ( )( {})-------------------------”
a=“Hello World!”
num=2
echo “a is :$a; num is: ${num};”

echo “Step 2 ---------------------------var=----------------------------”
num=3
echo “num reset to ${num}”

echo “Step 3 ---------------------------改变类型----------------------------”
num=“4”
echo “num reset and change type num to string ,now num is ${num}”

echo “Step 4 ---------------------------for in do done(可用与查询目录文件)-----------------------”
for useInVar in in1 in2 in3;
do
echo “userInVar is ${useInVar}”
done;
echo “Step 5 ---------------------------readonly var 将var变量设置为只读变量-----------------------”
readVarBegin=“只读设置之前”;
echo “readVarBegin value to change!”
readonly readVarBegin;
readVarBegin= “开始改变”;

echo “Step 6 ---------------------------unset var 将var变量删除为不可使用,只读的不可以设置-----------------------”
unset readVarBegin;
unsetVar=“删除为不可用变量”;
echo “unsetVar Before: u n s e t V a r " u n s e t u n s e t V a r ; e c h o " u n s e t V a r A f t e r : {unsetVar}" unset unsetVar; echo "unsetVar After: unsetVar"unsetunsetVar;echo"unsetVarAfter:{unsetVar}”

echo 'Step 7 ---------------------------KaTeX parse error: Expected '}', got '#' at position 2: {#̲strVar}获取变量的长度-…{length} ;it length is ${#length}";

echo ‘Step 8 ---------------------------${strVar:1:4}截取字符串从1开始不包括1截取4个字符串-----------------------’
subStr=“subStr”;
echo “subStr is s u b S t r , s u b f r o m o n e , t h e s t e p i s 4 : {subStr} ,sub from one,the step is 4: subStr,subfromone,thestepis4:{subStr:1:4}”;

echo ‘Step 9 ---------------------------数组的定义(arr1 arr2 arr3),赋值arrVar[n]=1,取值$ {数组名[下标]})获取数组的所有的元素echo $ {array_name[@]},数组长度length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]},…{#array_name[n]}-----------------------’
arrVar=(value0 value1 value2 value3)
echo “数组信息: a r r V a r [ @ ] 长 度 为 : {arrVar[@]} 长度为: arrVar[@]:{#arrVar[@]}”
echo “数组第一个信息: a r r V a r [ 0 ] 长 度 为 : {arrVar[0]} 长度为: arrVar[0]:{#arrVar[0]}”

echo ‘Step 10 ---------------------------注释的使用,单行注释使用#号,多行注释:<<EOF开始【要注释的内容】EOF结尾(EOF也可以换成!号)-----------------------’
:<<EOF
注释内容
EOF

:<<!
注释内容…
!

echo “”;
echo “”;
echo ‘Step 11 --------------------------------------------------’
echo “参考:https://www.runoob.com/linux/linux-shell-passing-arguments.html”;
echo ‘Step 11 ---------------------------脚本内获取参数的格式为: n 。 n 代 表 一 个 数 字 , 1 为 执 行 脚 本 的 第 一 个 参 数 , 2 为 执 行 脚 本 的 第 二 个 参 数 , 以 此 类 推 … … − − − − − − − − − − − − − − − − − − − − − − − ′ e c h o ′ n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……-----------------------&#x27; echo &#x27; nn12echo# 传递到脚本的参数个数’;
echo ‘ ∗ 以 一 个 单 字 符 串 显 示 所 有 向 脚 本 传 递 的 参 数 。 如 &quot; * 以一个单字符串显示所有向脚本传递的参数。如&quot; "*“用「”」括起来的情况、以"$1 $2 … n &quot; 的 形 式 输 出 所 有 参 数 。 ′ ; e c h o ′ n&quot;的形式输出所有参数。&#x27;; echo &#x27; n";echo$ 脚本运行的当前进程ID号’;
echo ‘ ! 后 台 运 行 的 最 后 一 个 进 程 的 I D 号 ′ ; e c h o ′ ! 后台运行的最后一个进程的ID号&#x27;; echo &#x27; !ID;echo@ 与 ∗ 相 同 , 但 是 使 用 时 加 引 号 , 并 在 引 号 中 返 回 每 个 参 数 。 如 &quot; *相同,但是使用时加引号,并在引号中返回每个参数。如&quot; 使"@“用「”」括起来的情况、以"$1" “ 2 &quot; … &quot; 2&quot; … &quot; 2""n” 的形式输出所有参数。’;
echo ‘ ! 后 台 运 行 的 最 后 一 个 进 程 的 I D 号 ′ ; e c h o ′ ! 后台运行的最后一个进程的ID号&#x27;; echo &#x27; !ID;echo- 显示Shell使用的当前选项,与set命令功能相同。’;
echo ‘$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。’;

echo “开始测试实验”;
echo “获取的参数是: ∗ ( * ( ( *这个返回的是一个字符串) @ ( @ ( @( @这个返回的是多个字符串,多参数分隔开->数组)”
for i in “$@”; do
echo i d o n e e c h o &quot; 脚 本 运 行 的 进 程 号 是 : i done echo &quot;脚本运行的进程号是: idoneecho":$ ,后台运行的最后的一个进程号是: ! &quot; e c h o &quot; 显 示 最 后 命 令 的 退 出 状 态 。 0 表 示 没 有 错 误 , 其 他 任 何 值 表 明 有 错 误 − &gt; !&quot; echo &quot;显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误-&gt; !"echo"退0>?"

echo “”;
echo “”;
echo ‘Step 12 --------------------------------------------------’;
echo “中括号的用法 (命令要包含空格)”;
echo “在为shell脚本传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。”;
echo ‘if [ -n “$1” ]; then 判断是否包含第一个参数’;
echo ‘算术比较, 比如一个变量是否为0, [ $var -eq 0 ]’;
echo ‘文件属性测试,比如一个文件是否存在,[ -e $var ], 是否是目录,[ -d $var ]’;
echo ‘字符串比较, 比如两个字符串是否相同, [[ $var1 = $var2 ]]’;

echo “”;
echo “”;
echo ‘Step 13 --------------------------------------------------’;
echo “Shell 基本运算符”;
echo “expr 是一款表达式计算工具,使用它能完成表达式的求值操作。注意运算时使用的是反引号如数据库特殊字段的使用的那个引号”+‘如expr $a - $b 结果为 -10。’;
echo “乘号(*)前边必须加反斜杠()才能实现乘法运算”
echo “”;
echo “关系运算符”
echo ‘-eq -ne(不相等) -gt(左大右) -lt(左小右) -ge -le 如:[ $a -le $b ] 返回 true。’

echo “”;
echo “”;
echo ‘Step 14 --------------------------------------------------’;
echo “布尔运算符”;
echo ‘! 非运算 -o 或运算 -a 与运算’

echo “”;
echo “”;
echo ‘Step 15 --------------------------------------------------’;
echo “逻辑运算符”;
echo ‘&& 逻辑的 AND || 逻辑的 OR’

echo “”;
echo “”;
echo ‘Step 16 --------------------------------------------------’;
echo “字符串运算符”;
echo “= 检测两个字符串是否相等,相等返回 true。”;
echo “!= 检测两个字符串是否相等,不相等返回 true。”;
echo “-z 检测字符串长度是否为0,为0返回 true。”;
echo “-n 检测字符串长度是否为0,不为0返回 true。”;
echo “$ 检测字符串是否为空,不为空返回 true。”;

echo “”;
echo “”;
echo ‘Step 17 --------------------------------------------------’;
echo “文件测试运算符”;
echo “-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。”
echo “-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。”
echo “-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。”
echo “-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。”
echo “-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。”
echo “-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。”
echo “-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。”
echo “-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。”
echo “-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。”
echo “-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。”
echo “-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。”
echo “-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。”
echo “-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。”

echo “”;
echo “”;
echo ‘Step 18 --------------------------------------------------’;
read -p “请输入一段文字:” -n 6 -t 5 -s passwordVar
echo “第一个输入的变量为:${passwordVar}”
echo ‘read -p “请输入一段文字:” -n 6 -t 5 -s password’;
echo “-p 输入提示文字”;
echo “-n 输入字符长度限制(达到6位,自动结束)”;
echo “-t 输入限时”;
echo “-s 隐藏输入内容”;
echo “请输入数据:”;
read readVar;
echo “you input value is ${readVar}”;

echo “”;
echo “”;
echo ‘Step 19 --------------------------------------------------’;
echo “显示结果定向至文件”+‘It is a test > myfile’;
echo “It is a test” > myfile

echo “”;
echo “”;
echo ‘Step 20 --------------------------------------------------’;
echo “test的使用”+‘if test $[num1] -eq $[num2] then 做某事 else echo 做某事 fi’;
testNumVar1=100;
testNumVar2=200;
if test ${testNumVar1} -eq t e s t N u m V a r 2 t h e n e c h o &quot; {testNumVar2} then echo &quot; testNumVar2thenecho"{testNumVar1} 等于 t e s t N u m V a r 2 &quot; e l s e e c h o &quot; {testNumVar2}&quot; else echo &quot; testNumVar2"elseecho"{testNumVar1} 不等于 ${testNumVar2}"
fi

echo “”;
echo “”;
echo “https://www.runoob.com/linux/linux-shell-process-control.html”;
echo ‘Step 21 --------------------------------------------------’;
echo ‘多行操作:if condition then command; elif condition2 then command else commandn fi’;
echo ‘单行操作:if [ $(ps -ef | grep -c “ssh”) -gt 1 ]; then echo “true”; fi 这个后面的grep的-c是返回匹配的总行数’;

echo “”;
echo “”;
echo ‘Step 22 -----------------while for until case 跳出循环break 跳出当前循环continue---------------------------------’;
echo “for 循环 多行-参考命令”;
for forVar in “item1” “item2” “itemN”
do
echo “${forVar}”;
done
echo “for循环 一行-参考命令”;
for forVarOneLine in “item1” “item2” “itemN”; do echo ${forVarOneLine}; done;

echo “”;
echo “”;
echo “while 语句”;
whileVar=1
while (( w h i l e V a r &lt; = 5 ) ) d o e c h o &quot; {whileVar}&lt;=5)) do echo &quot; whileVar<=5))doecho"{whileVar}"
let “whileVar++”
done

echo “”;
echo “”;
echo ‘Step 23 -----------------函数即functionName(){} 调用函数即functionName 参数1 参数n---------------------------------’;
funWithParam(){
echo “第一个参数为 $1 !”
echo “第二个参数为 $2 !”
echo “第十个参数为 $10 !”
echo “第十个参数为 ${10} !”
echo “第十一个参数为 ${11} !”
echo “参数总数有 $# 个!”
echo “作为一个字符串输出所有参数 $* !”
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值