- 错误在第二行:变量声明中不应该有空格。
#!/bin/bash
var1="Welcome to bash scripting ..."
echo $var1
- 结果将是
Tuesday
,因为数组是零基的。 - 这里有两个错误:第一个错误是变量声明中的空格,第二个错误是使用了单引号,而我们应该使用反引号。
解决方案:
#!/bin/bash files='ls -la' echo $files
- 变量
b
的值为c
,变量c
的值为a
。
因为我们没有在赋值行中使用美元符号,所以变量将采用字符值而不是整数值。
- 三个
这是因为整个 bash 主要是一个注释,所以有三行注释。
- 选项
-b
与其值之间没有空格,因此它将被视为一个选项。
-a
-b50
-c
- 1
四个
这是因为我们有 5 个传递的参数,并且我们使用 shift 来删除一个参数。
- 2
-n
这是因为它位于左侧,而shift
命令从左侧删除参数。
False
由于小写字符具有较高的 ASCII 顺序,语句将返回False
。
- 两者都是正确的,并将返回相同的结果,即
Strings
不相同。 Three
我们可以使用以下方法:
- :大于等于
-gt
:大于- :不等于
- 真正的
因为一个测试足以返回 true,所以我们可以确定第二个测试将返回 true。
- 我们可以进行以下更改:
"Hello message": {
"prefix": "hello",
"body": [
"echo 'Hello ${1|first,second,third|}' "
],
"description": "Hello message"
}
source
命令。
- 使用
((
:
#!/bin/bash
num=$(( 25 - 8 ))
echo $num
- 问题在于文件名中的空格。 要修复它,把文件名放在引号之间:
$ rm "my file"
- 括号前没有美元符号:
#!/bin/bash
a=$(( 8 + 4 ))
echo $a
-
没有行。 因为循环输出被重定向到一个文件,所以屏幕上不会显示任何内容。
-
四。 循环将从
8
开始,一直持续到12
,它将匹配大于或等于的条件,并中断循环。 -
问题在于
for
循环定义中的逗号。 它应该是分号。 所以正确的脚本应该如下所示:
#!/bin/bash
for (( v=1; v <= 10; v++ ))
do
echo "value is $v"
done
- 由于递减语句在循环之外,count 变量将是相同的值,即
10
。 这是一个无限循环,它将永远打印10
,要停止它,你需要按Ctrl+C。
- 由于我们使用的是
$1
变量而不是$@
,因此函数将只返回第一个元素。 50
是的,它是一个全局变量,但因为我们在函数调用之前打印了值,所以变量不受影响。- 缺少括号
()
或在函数名前添加关键字 function。 应该这样写:
clean_file() {
is_file "$1"
BEFORE=$(wc -l "$1")
echo "The file $1 starts with $BEFORE"
sed -i.bak '/^\s*#/d;/^$/d' "$1"
AFTER=$(wc -l "$1")
echo "The file $1 is now $AFTER"
}
- 问题在于函数调用。 在函数调用期间不应该使用括号
()
。 括号只能在函数定义中使用。 正确的代码应该是这样的:
#!/bin/bash
myfunc() {
arr=$@
echo "The array from inside the function: ${arr[*]}"
}
test_arr=(1 2 3)
echo "The origianl array is: ${test_arr[*]}"
myfunc ${test_arr[*]}
- 一个也没有。 因为您正在用一个不存在的大写字母搜索 Sed
- 一个也没有。 删除命令
d
只删除流中的行,不删除文件。 要从文件中删除,可以使用-i
选项。 - 第四行。 因为我们使用了追加命令 a,所以它将被插入到指定的位置之后。
- 没有,因为
w
标志只与替代命令s
一起使用。
- 可以使用以下命令打印第 50 行:
$ sed -n '50 p ' /etc/httpd/conf/httpd.conf
- Apache 默认端口
80
可以修改为8080
:
$ sed -i '0,/Listen [0-9]*/s//Listen 8080/' /etc/httpd/conf/httpd.conf
我们搜索Listen
,其中定义了 Apache 默认端口,搜索它旁边的数字,并将其更改为Listen 8080
。
- 没有什么
你应该使用没有美元符号的变量名来打印它。
- 解决方案:0
因为您应该打印$1
而不是$2
,其中$1
是第一个字段。
while
循环的迭代值应该小于4
而不是3
。1
因为 UID 小于1
的唯一用户是 root(UID=0
),所以将打印一行。
- 0 行
因为单词awesome
后面有一个句号,如果您想打印该行,可以使用以下命令:
$ awk '/awesome\.$/{print $0}' myfile
- 两条线
因为我们搜索包含单词scripting
的行。 如果句点后面跟着任何文本,则该模式只存在于两行中,因为第三行在单词后面不包含句点。
- 三行
因为我们使用了问号,这意味着字符类不是模式匹配的必须对象。
- 没有什么
由于我们使用了管道符号,这是一个 ERE 字符,并且由于我们使用 sed,我们必须使用 sed 的-r
选项来打开扩展引擎。
- 字段 1
- 您可以使用
print NR
或通过管道将输出输出到wc -l
我们必须使用-l
,否则它将计算单词。
$ awk '{print $1}' access.log | sort | uniq -c
$ awk '{print $7}' access.log | grep 'php' | sort | uniq -c | sort -nr | head -n 1
你应该使用标题-n 1
来获得只有一页的内容。
- 使用
lastlog
命令
$ lastlog | awk ' /Never logged/ { print $1}'
- 使用
wc
命令
$ lastlog | awk ' /Never logged/ { print $1}' | wc -l
- 零。 因为这一行以两个星号结尾。
- 8
- 因为我们正在使用
sys
模块,所以应该首先导入它。
所以正确的代码应该是这样的:
#!/usr/bin/python3
import sys
print( len(sys.argv))
- 2