Linux Shell脚本基础

Linux-Shell 脚本基础

[TOC]

命令拼接符

&&

whoami && id		#只有当第一条命令执行成功,才会执行第二条命令。

[!NOTE]

如果 && 命令用在网址(url)中,需要进行 url 编码,把 && 编码为 %26%26

||

whoani || id		#只有当第一条命令执行失败,才会执行第二条命令

;

whoami;id			#执行两条命令,只支持 Linux

&

whoami & id			#执行两条命令,Linux 和 windows 都能用

[!NOTE]

Linux 中执行 whoami & id,实际上是把 whoami 放在后台执行,然后再执行 id。

& 是 Linux 后台运行标识符。

windows 中执行 ipconfig & whoami,& 符只是单纯的命令拼接符,和 Linux 的 ; 一样。

|

whoami | id
cat /etc/passwd | grep root			#执行第一条指令,把第一条指令的输出,
									#作为第二条指令的输入,执行第二条指令

VSC 基础使用

下载安装并汉化

  • 官方下载
  • 汉化——官方插件库搜索“中文”,安装官方汉化包。

VSC 编辑 Linux 中的文件

  • 在 Linux 中安装 Linux 版本的 VSC。

  • 通过 ssh 连接 Linux 编辑。

    • 官方插件库搜索 ssh,安装官方的 ssh 软件 Remote - SSHimage-20250611100230534
    • 在 VSC 界面右侧可以找到 远程资源管理器image-20250611100857437
    • 远程资源管理器 中进行新建远程,并输入 ssh 连接命令进行连接。 image-20250611101535989
    • 点击建立的远程进行连接并输入密码,即可登录。(登陆成功,界面左下角会有提示!!!) image-20250611102708987
    • 设置密钥登陆——点击打开 SSH 配置文件,设置登陆用户名以及私钥路径。 image-20250611104019116

Shell 脚本基础

编写脚本

#!/bin/bash			#是shebang,用于指定谁来运行这个 Shell 脚本。

#设置运行命令
id
whomai
echo "hello shell!"

[!warning] CRLF 和 LF

Windows 和 Linux 的回车换行可能不同,Linux 中的换行为 LF(\n),Windons 中的为 CRLF(\r\n)。

所以在 Windons 上编写的 Shell 脚本可能无法运行(因为使用的是 CRLF 换行)。

大部分的 IDE 软件都会带有 LF 和 CRLF 的切换。 image-20250611111053364

运行脚本

  • 方法一(不推荐):

    #赋予对应的 Shell 脚本执行权限
    chmod +x xxx.sh
    
    #运行 Shell 脚本
    ./xxx.sh
    

    [!note]

    不推荐该方法的原因:

    • 当前用户可能不是 bash,比如 kali 是 zsh。

      刚好可以运行原因:

      • 有 shebang。
      • 代码刚好兼容 zsh。
    • 需要预先赋予执行权限。

  • 方法二(推荐):

    bash xxx.sh
    

    [!note]

    该方法不需要担心 shell 的类型,不需要执行权限。

基础语法

变量

#!/bin/bash

#定义变量
name="xia"
age=18
username=`whoami`				#用的是 反引号,功能为执行命令
uid=`id -u`						#-u 输出当前用户的 uid

#调用变量
echo $name
echo $age
echo "my name is $name"			#用的是双引号,输出:my name is xia
echo "my name is \$name"		#添加了转义字符 \,输出:my name is $name 
echo 'my name is $name'			#用的是单引号输出:my name is $name
echo "my name is $name666"		#输出:my name is ,因为没有 name666 变量
								#所以该命令中调用的变量输出为空。
echo "my name is ${name}666"	#输出:my name is xia666
echo "当前登陆的用户名是:$username"	#输出:当前登陆的用户名是:root
echo "当前用户的UID是:$uid"		#输出:当前用户的UID是:0

参数

执行以下脚本时,在终端输入命令:bash demo.sh arg1 arg2 arg3

#!/bin/bash

echo "当前文件的文件名是 $0"			#输出:当前文件的文件名是 demo.sh
echo "当前文件的绝对路径是 `pwd`/$0"	#输出:当前文件的绝对路径是
							#/home/kali/Desktop/shell_scripts/demo.sh
echo "当前文件的绝对路径是 $PWD/$0"	#输出:当前文件的绝对路径是
							#/home/kali/Desktop/shell_scripts/demo.sh
echo "用户传入的第一个参数是 $1"		#输出:用户传入的第一个参数是 arg1
echo "用户传入的第二个参数是 $2"		#输出:用户传入的第一个参数是 arg2
echo "用户传入的第三个参数是 $3"		#输出:用户传入的第一个参数是 arg3

数学计算

默认数学计算,不支持小数,如果进行小数计算,需要安装 bc 计算器。

#Linux 命令,需要注意一定要加空格,否则会直接输出
expr 1 + 1		#输出:2
expr 1 - 1		#输出:0
expr 2 \* 4		#输出:8
expr 4 / 2		#输出:2
expr 4 % 3		#输出:1
#!/bin/bash

#在 Shell 脚本中使用数学计算
echo "$[1+1]"		#输出:2
echo "$[1-1]"		#输出:0
echo "$[2*4]"		#输出:8
echo "$[4/2]"		#输出:2
echo "$[4%3]"		#输出:1

结构化命令

if 命令
#!/bin/bash

#如果 命令1 执行成功,就执行 命令2,否则就不执行
if 命令1
then
	命令2
fi
#!/bin/bash

#如果 命令1 执行成功,就执行 命令2,否则就执行 命令3
if 命令1
then
	命令2
else
	命令3
fi

#判断当前用户是否是管理员用户
if [ `id -u` -eq 0 ]	#注意:此处的方括号内部左右两边均有一个空格
then
	echo "你是管理员"
else
	echo "你不是管理员"
fi					#当前为 root 用户,所以输出:你是管理员
					#当前不是 root 用户,所以输出:你不是管理员

#判断当前的操作系统是否是 kali
if cat /etc/os-release | grep Kali >/dev/null
					#>/dev/null 丢弃输出
					#if 语句亦可为 grep -q kali /etc/os-release 等
					#-q 为安静模式
then
	echo "你的操作系统是Kali"
else
	echo "你的操作系统不是Kali"
fi
case 命令
#!/bin/bash

echo "请输入数字(0-4):"
read options		#read 从标准输入读取一行文本,赋值给变量
case $options in
	0) echo "你选择的是0" ;;
	1) echo "你选择的是1" ;;
	2) echo "你选择的是2" ;;
	3) echo "你选择的是3" ;;
	4) echo "你选择的是4" ;;
	*) echo "无效输入!" ;;
esac

echo "请输入[Y/n]:"
read options
case $options in
	Y) echo "继续执行···" ;;
	n) echo "退出执行" ;;
	*) echo "继续执行···" ;;
esac
#!/bin/bash

#判断当前操作系统是否是 ubuntu / debian / kali / 其他OS
##法一:
if cat /etc/os-release | grep "kali" >/dev/null
then
	echo "你的操作系统是kali"
else
	if cat /etc/os-release | grep "debian" >/dev/null
	then
		echo "你的操作系统是debian"
	else
		if cat /etc/os-release | grep "ubuntu" >/dev/null
		then
			echo "你的操作系统是ubuntu"
		else
			echo "你的操作系统是其他操作系统"
		fi
	fi
fi

##法二:
if [ -f /etc/debian_version ]	#-f 判断系统中是否存在 /etc/debian_version
then
	. /etc/os-release		#加载 /etc/os-release 中的变量
	if [ $ID == "ubuntu" ]
	then
		echo "你的操作系统是ubuntu"
	else
		if [ $ID == "debian" ]
		then
			echo "你的操作系统是debian"
		else
			echo "你的操作系统是kali"
		fi
	fi
else
	echo "你的操作系统是其他操作系统"
fi

##法三
if [ -f /etc/debian_version ]
then
    . /etc/os-release
    case "$ID" in
        ubuntu)
            echo "你的操作系统是ubuntu"
            ;;
        debian)
            echo "你的操作系统是debian"
            ;;
        kali)
            echo "你的操作系统是kali"
            ;;
        *)
            echo "你的操作系统是其他操作系统"
            ;;
    esac
else
	echo "你的操作系统是其他操作系统"
fi
for in 命令
#!/bin/bash

#以下命令等价于 ls /etc/ssh/ 命令
for files in /etc/ssh/*		#读取 /etc/ssh 文件下所有的文件或文件夹
do
	echo $files
done
while 命令
#!/bin/bash

var1=10
while [ $var1 -ge 0 ]
do
	echo $var1
	var1=$[ $var1 - 1 ]
done
操作符含义
-eq等于
-ne不等于
-lt小于
-le小于或等于
-gt大于
-ge大于或等于
函数
#!/bin/bash

funtion_name() {
	#函数体
	echo "0.选项0"
	echo "1.选项1"
	echo "2.选项2"
	echo "3.选项3"
	echo "4.选项4"
	echo "其他选项,退出程序!"
}

while true		#死循环,good!!!
do
	funtion_name
	echo "请你输入一个选项(0-4)"
	read options
	case $options in
		0) echo "你选择了0" ;;
		1) echo "你选择了1" ;;
		2) echo "你选择了2" ;;
		3) echo "你选择了3" ;;
		4) echo "你选择了4" ;;
		*) echo "无效输入,退出程序"; exit 0 ;;
	esac
done

Linux 环境变量

操作系统自带环境变量

#调出环境变量命令
env

重要环境变量:

  • USER:当前的登陆用户名。

  • HOME:当前用户家目录。

  • PATH:里面保存了一系列 目录路径,这些路径是系统在执行命令时 自动查找可执行程序的地方

    • 输入命令,比如 ls
    • 系统会到 PATH 中的目录 一个个查找 有没有 ls 这个可执行文件。
    • 找到就执行,找不到就提示 command not found
  • SHELL:当前的 Shell 类型。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇