菜鸟的shell~

https://www.runoob.com/linux/linux-shell.html
https://www.runoob.com/linux/linux-comm-awk.html

等号两侧避免使用空格
使用一个定义过的变量,只要在变量名前面加美元符号即可
推荐给所有变量加上花括号,这是个好的编程习惯。
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
使用 unset 命令可以删除变量,变量被删除后不能再次使用。unset 命令不能删除只读变量。
可以使用 declare 或 typeset 命令来声明整数变量。这样的变量只包含整数值,例如:declare -i my_integer=42
字符串跟其他语言一样定义
“数组可以是整数索引数组或关联数组,以下是一个简单的整数索引数组的例子:
my_array=(1 2 3 4 5)
或者关联数组:
declare -A associative_array
associative_array[”“name”“]=”“John”"
associative_array[““age””]=30" "其中-A 选项就是用于声明一个关联数组。

关联数组的键是唯一的"
“$0 表示脚本的名称,$1, $2, 等表示脚本的参数。
KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲表示传递给脚本的参数数量,? 表示上一个命令的退出状态等。” 10 不能获取第十个参数,获取第十个参数需要 10 不能获取第十个参数,获取第十个参数需要 10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。
"单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符"
变量为字符串时,${#string} 等价于 KaTeX parse error: Expected '}', got '#' at position 2: {#̲string[0]},都为字符…{string:1:4}第一个字符的索引值为 0。
"bash支持一维数组(不支持多维数组),并且没有限定数组的大小。读取数组元素值的一般格式是:
${数组名[下标]}。使用 @ 符号可以获取数组中的所有元素,例如:echo KaTeX parse error: Expected 'EOF', got '#' at position 19: …ray_name[@]}" "#̲ 取得数组元素的个数 leng…{#array_name[@]}

或者

length=${#array_name[*]}

取得数组单个元素的长度

length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[n]} …{array_name[index]}
在数组前加一个感叹号 ! 可以获取数组的所有键
echo "“数组的键为: ${!site[]}“”
echo ""数组的键为: ! s i t e [ @ ] " " " " : < < E O F 注释内容 . . . 注释内容 . . . 注释内容 . . . E O F " " {!site[@]}""" ":<<EOF 注释内容... 注释内容... 注释内容... EOF" " !site[@]"""":<<EOF注释内容...注释内容...注释内容...EOF""# 传递到脚本的参数个数
$
以一个单字符串显示所有向脚本传递的参数
? 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。 " " ? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。" " ?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。""* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,则 “” * “” 等价于 ““1 2 3"”(传递了一个参数),而 “”@”” 等价于 ““1"” ““2"” ““3"”(传递了三个参数)。”
expr运算 “表达式和运算符之间要有空格;
完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边;
乘号(*)前边必须加反斜杠()才能实现乘法运算;
条件表达式要放在方括号之间,并且要有空格。”
布尔运算符!非,-o或,-a与 其优先级为: ! 最高, -a 次之, -o 最低。
逻辑运算符&&(表示and),||(表示or)
“字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 ““abc””,变量 b 为 ““efg””:
运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否不相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z a ] 返回 f a l s e 。 − n 检测字符串长度是否不为 0 ,不为 0 返回 t r u e 。 [ − n " " a ] 返回 false。 -n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n "" a]返回falsen检测字符串长度是否不为0,不为0返回true[n""a”” ] 返回 true。
$ 检测字符串是否不为空,不为空返回 true。 [ $a ] 返回 true。”
"文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。

属性检测描述如下:

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。"
“printf %s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐”
条件判断,如果用[…]需要用-gt类的,如果用((…))则可用>和<这种符号 “if condition
then
command1
command2

commandN
else
command
fi” "if else-if else 语法格式:

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi"
“for var in item1 item2 … itemN
do
command1
command2

commandN
done” for循环格式
“while condition
do
command
done” while循环格式
“case 值 in
模式1)
command1
command2

commandN
;;
模式2)
command1
command2

commandN
;;
esac” 多选择语句格式
"shell中函数的定义格式如下:

[ function ] funname [()]

{

action;

[return int;]

}" “1、可以带 function fun() 定义,也可以直接 fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。
函数返回值在调用该函数后通过 $? 来获得。” " return 语句只能返回一个介于 0 到 255 之间的整数,而两个输入数字的和可能超过这个范围。

要解决这个问题,您可以修改 return 语句,直接使用 echo 输出和而不是使用 return"
“参数处理 说明
$# 传递到脚本或函数的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
@ 与 @ 与 @*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。”
"
命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。"
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
“如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null;如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出”

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值