shell脚本是什么

一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们

经常需要使用多个命令来完成一项任务,我们可以添加这些命令在一个文本文

件(Shell脚本)来完成这些日常工作任务。

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

在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。

使用chsh命令或usermod命令可以改变默认的shell。

usermod -s shell 

chsh -s shell

可以在shell脚本中使用哪些类型的变量

在shell脚本,我们可以使用两种类型的变量:

  • 系统定义变量:

是由系统自己创建的,这些变量通常由大写字母组成,可以通过“set”命令查看

  • 用户定义变量:

是由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看

如何将标准输出和错误输出同时重定向到同一位置

方法一:2>&1

ls /usr/share/doc > out.txt 2>&1

方法二:&>

ls /usr/share/doc &> out.txt

在脚本中常用 &>/dev/null 把命令的输出结果干掉

shell脚本中“if”语法如何嵌套

if [ condition1 ];then
command1
if [ condition2 ];then
command2
fi
else
if [ condition3 ];then
command3
elif [ condition4 ];then
command4
else
command5
fi
fi

shell脚本中“$?”标记的用途是什么

在写一个shell脚本时,如果想要检查前一命令是否执行成功,在 if 条件判断

中可以使用“$?”来检查前一命令的结束状态。

如果结束状态是0,说明前一个命令执行成功;

如果结束状态不是0,说明命令执行失败。

如 在判断vsftpd软件包是否安装的脚本中:

#!/bin/bash
rpm -q vsftpd &> /dev/null
if [ $? -eq 0 ];then
echo "vsftpd已经安装"
else
echo "该软件包没有安装,正在安装...."
yum install -y vsftpd &> /dev/null

if [ $? -eq 0 ];then
echo "vsftpd安装成功"
else
echo "vsftpd安装失败"
fi
fi

在shell脚本中如何比较两个数字

在 if 条件判断中使用下面的符号进行判断

-eq 
-ne
-gt
-lt
-ge
-le

如:

#!/bin/bash
x=10
y=20
if [ $x -gt $y ];then
echo x is greater than y
else
echo y is greater than x
fi

shell脚本中break命令的作用

终止循环

shell脚本中continue命令的作用

跳出本次循环,进行下一轮循环

shell脚本中case语句的语法

case $var in            ;var
pattern 1) 1 |
command1
;;
pattern 2)
command2
;;
pattern 3)
command3
;;
*) default*)
command4
;;
esac esaccase

shell脚本中while循环语法

while 
do
command
...
done

如何使脚本可执行

//
[root@MissHou shell01]# chmod +x 1.sh

//
[root@MissHou shell01]# /shell/shell01/1.sh



//
[root@MissHou shell01]# ./1.sh

“#!/bin/bash”的作用 

#!魔法字符,告诉系统这个脚本需要使用哪一种shell来执行

即这个脚本需要使用/bin/bash解释器来执行

shell脚本中for循环语法

1、列表循环

用于将一组命令循环执行已知的次数

for variable in {list}
do
command
command

done


[root@localhost shell]# for i in {1..5};do echo $i;done
1
2
3
4
5

2、不带列表循环

由用户指定的参数和参数的个数决定循环次数

for variable
do
command
command

done



for variable in "$@"
do
command
command

done



[root@localhost shell]# cat for.sh
#!/bin/bash
for var
do
echo $var
done
[root@localhost shell]# ./for.sh a b c
a
b
c

3、类C风格的for循环

for(( expr1;expr2;expr3 ))
do
command
command

done



for (( i=1;i<=5;i++))
do
echo $i
done

如何调试shell脚本

[root@MissHou shell01]# bash -x 1.sh
+ hostname #脚本本身的命令(有+)
MissHou.itcast.cc #执行结果
+ date
Sun Jul 22 14:43:20 CST 2018

-x:
-n:

shell脚本如何比较字符串

在 if 条件判断中使用下面的符号进行判断

-z         0
-n
string1 = string2
string1 != string2

shell脚本如何判断文件是否存在

在 if 条件判断中使用下面的符号进行判断

-e     
-f
-d
-S socket
-p pipe
-c character
-b block
-L link
-s

三种语法格式:

test -e file          
[ -d /shell01/dir1 ]
[ ! -d /shell01/dir1 ] ,
[[ -f /shell01/1.sh ]]

bash中有哪些特殊的变量

$?00

$$

$!

!$

!!

$#:脚本后面接的参数的个数

$*

$@:

$0/

$1~$9

${10}~${n} 10{}

在shell脚本中,如何写入注释

每一行注释以#开头

如何让 shell 脚本得到来自终端的输入

read命令可以读取来自终端用户的输入并置于给出的变量中

如:

[root@localhost shell]# read -p "Input your name:" name
Input your name:harry
[root@localhost shell]# echo $name
harry

如何取消变量

unset  

如何执行算术运算 

Bash shell 的算术运算有四种方式:

1. 使 $(( ))    $((1+1))
2. 使$[ ] $[1+1]
3. 使 expr expr 1 + 1
4. 使 let let n+=1

在shell脚本如何定义函数

()
{

}



function ()
{

}

如何向脚本传递参数

在执行脚本时把参数写在脚本后面

在脚本里面通过 $1 来表示这个参数

./script.sh argument

如 在显示文件名称的脚本中:

[root@localhost shell]# ./show.sh file1.txt
[root@localhost shell]# cat show.sh
#!/bin/bash
cat $1

如何在脚本中使用参数

$1:第一个参数,$2:第二个参数...

如 在复制文件的脚本中:

脚本会复制文件(arg1) 到目标地址(arg2)

[root@localhost shell]# ./copy.sh file1.txt /tmp/
[root@localhost shell]# cat copy.sh
#!/bin/bash
cp $1 $2

如何计算传递进来的参数

$#

如何在脚本中获取脚本名称

$0

如何检查之前的命令是否运行成功

$

如何获取文件的最后一行

tail -1 

如何获取文件的第一行

head -1 

如何获取一个文件每一行的第三个元素

awk '{print $3}' file

假如文件中每行第一个元素是 FIND,如何获取第二个元素

awk '{ if ($1 == "FIND") print $2}'

如何获取文本文件的第 10 行

sed -n '10p' file



head -10 file|tail -1

bash 脚本文件的第一个符号是什么

#

命令:[ -z "" ] && echo 0 || echo 1 的输出是什么

0

命令 “export” 有什么用

将当前变量变成环境变量(临时)

环境变量:当前进程有效,并且能够被子进程调用。

如何在后台运行脚本

方法一:

在执行脚本命令的最后增加一个&符号

bash test.sh &

可以看到[1] 13641的回显说明脚本在后台执行了

方法二:

在执行脚本命令的前面使用nohup命令,结尾追加&符号

nohup bash test.sh &

用于不中断的在后台执行脚本

“chmod 500 script” 做什么

使脚本所有者拥有可执行权限

& 和 && 有什么区别

& – 希望脚本在后台运行的时候使用它

&& – 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

命令: name=John && echo ‘My name is $name’ 的输出是什么

My name is $name

如何只用 echo 命令获取字符串变量的一部分

echo ${变量名:起始位置:长度}

如:

variable="My name is Petras, and I am developer."
echo ${variable:11:6}
Petras