Linux-shell script相关

Q1: Shell脚本是什么、它的作用?

A1:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们将多条命令放在同一个Shell脚本来完成一些日常工作任务。
 

Q2:“#!/bin/bash”的作用 ?

A2:#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

Q3: 什么是默认登录shell,如何改变指定用户的登录shell

A3:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。
使用chsh命令可以改变默认的shell。示例如下所示:

# chsh <用户名> -s <新shell>
# chsh linuxtechi -s /bin/sh

 

Q4:可以在shell脚本中使用哪些类型的变量?
A4:a.用户定义的变量 (self_define_name=10  echo "$self_define_name")
b.系统自定义的变量(可以通过set命令查看,大写字母命名的)

echo $LANG  输出结果:en_US.UTF-8

注意:变量赋值,变量名和等号之间不能有空格。
使用变量:echo ${your_name} 或者 echo $your_name,{}可加可不加
只读变量readonly your_name
可使用 declare 或 typeset 命令来声明整数变量。

环境变量:echo $PATH
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

Q5: 如何将标准输出和错误输出同时重定向到同一位置?
A5:ls /etc/proc/ &> out.txt

Q6: 如何使脚本可执行 ?

A6:给文件加可执行权限

# chmod a+x test.sh

Q7: 如何调试shell脚本 ?

A7:sh -x test.sh
或者在shell script文件写上这条,# ! /bin/bash -xv

Q8:$的用法有哪些?代表什么意思?

$#传递到脚本的参数个数
$*

以一个单字符串显示全部传递的参数。(以字符串列出所有传递到脚本中的参数)

$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@显示全部传递的参数。(以分隔符列出所有传递到脚本中的参数)

实例:
for i in "$@"; do
    echo $i
done

output:
1
2
3

如果是用$*,则output是1 2 3

$?显示上一条命令的退出状态。0表示没有错误,其他任何值表明有错误。
如果有错误,可以使用perror 错误码,查看是类型的错误
$ perror 2
OS error code 2: No such file or directory

 

Q9:如何获取来自终端的输入?
A9:a.通过read命令   

#!/bin/bash
echo ‘Please enter your name’ read name
echo “My Name is $name”
# ./test.sh Please enter your name
LinuxTechi
​​​​​​​My Name is LinuxTechi

b.$@或$*获取用户输入的所有参数
 

Q10: 如何取消变量或取消变量赋值 ?

A10:“unset”命令用于取消变量或取消变量赋值(# unset <变量名>)

Q11:从文件中获取最后一行?如何从文件中获取第一行?

A11:最后一行tail -1。第一行 head -1
其它操作:从文本文件中获取第 10 行, head -10 aa.txt | tail -1

Q12:打印文本中有“self”字符的行
​​​​​​awk 是一种处理文本文件的语言,是一个强大的文本分析工具。

[root@iZbp1gyr6n52tkg93dybldZ ~]# awk '/self/ {print NR, $0}' aa.sh 
3 self_define_name=10
4 echo "$self_define_name"

Q13:if语句、if else、if elif语句

if语句:
if condition

then
command
fi

if else语句:

if condition

then
command

else

command2
fi

if elif 语句:

if condition

then

command1

elif condition

then

command2

else

command3

fi
 


实例:
a=10

b=15

if [ $a == $b ]

then

    echo "a equal b"

elif [ $a -gt $b ]

then

    echo "a is greater than b"

else

    echo "b is lowwer than a"

fi

算术运算符:

运算符说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 -10。
*乘法`expr $a \* $b` 结果为  200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

算术运算符可以用expr命令: `` 注意是这个符号,不是单引号
val=`expr $a + $b`
echo "a + b : $val"

关系运算符:

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

Q13:for循环语句

for var in var_list

do

echo $var

done

for loop in 1 2 3 4 5
do
    echo "the value is: $loop"
done

Q14:while循环

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据

while condition

do

   command1

done
 

Q14:until语句

until 循环执行一系列命令直至条件为 true 时停止。

num=1

until [ ! $num -lt 10 ]

num=`expr $num + 1`

do

    echo num

   num=`expr $num + 1`

done

输出1-9 

Q15:case 语句

echo "请输入1-3的数字"

echo "你输入的值为"

read num

case $num in

1) echo "你输入了1"

;;

2) echo "你输入了2"

;;

3) echo "你输入了3"

;;

esac

Q16:break 和 continue的区别

A16:break命令是退出执行中的循环。

continue命令只跳出当前循环的迭代,而不是整个循环

Q17:字符串比较

参数说明
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真

Q18:文件测试运算符有哪些

cd /bin

if test -e ./bash

then

    echo "file exist"

else

    echo "file does not exist"

fi

-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真

Q19:如何获取数组的长度

my_array=(a b "c" d e)

echo "array length is ${#my_array[*]}"

通过下标获取数组的值“:echo "array 0 is ${my_array[0]}"

关联数组:declare -A site=(["web1"]="aliyun" ["web2"]="tencent")

通过键访问关联数组内的值:echo "${site[web1]}"

获取字符串的长度:echo ${#string}

string="fortest "
​​​​​​​echo ${string:1:4}  输出orte

Q20:如何定义和调用函数

function sum(){

 he=`expr $1 + $2`
 echo "he value is $he"
}

sum 1 3

Q21:如何引用外部文件

tesh.sh
 

#!/bin/bash
url="test1"
#!/bin/bash
# source ./test1.sh
echo "test1 info is:$url" 
$ chmod +x test2.sh 
$ ./test2.sh 
test1 info is test1

 

#! /bin/bash 
# ! /bin/bash -xv,this is zhushi,-xv is debug bash
self_define_name=10
echo "$self_define_name"
echo $LANG

echo "the shell script filename is $0"
echo "the first input parameter is $1"
echo "the the count of parameter is $#"
echo "$* echo all parameter is {$*}"
echo "$@ echo all parameter is $@"

# 定义环境变量
export MY_ENV_VAR="SomeValue"

# 打印环境变量
echo "Environment Variable: $MY_ENV_VAR"



function sum(){

 he=`expr $1 + $2`
 echo "he value is $he"
}

sum 1 3

 

多行注释:使用了冒号 : 命令,并用单引号 ' 将多行内容括起来
: '
注释1111
注释22222
'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值