Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序,一般文件后缀为 .sh。
一、shell环境
Linux 环境下有很多可以使用的shell,每个用户都拥有一个特定的默认shell。在Linux系统中,/etc/shells文件用于指定哪些程序路径可以作为有效的登录shell。
Shell 的解释器种类众多,常见的有:
shell 解释器 | 说明 |
---|---|
sh | Bourne Shell。sh 是 Unix 标准默认的 shell。 |
bash | Bourne Again Shell。bash 是 Linux 标准默认的 shell。 |
tcsh | 整合 C Shell ,提供更多的功能 |
csh | 已经被 /bin/tcsh 所取代 |
zsh | 功能强大的 shell 与脚本语言。 |
要查看系统中允许的合法登录shell,可以执行以下命令:
cat /etc/shells
1.1 当前用户的默认shell
用户的“默认shell”是指他们登录系统后自动启动的命令行解释器或交互式shell。这个shell用于处理用户在命令行界面输入的命令和操作。
可以使用如下命令查看当前默认shell
echo $SHELL
1.2 修改当前用户默认shell
要更改用户的默认shell,可以在命令行中输入以下命令:
chsh -s
其中是你想要设置为用户默认shell的路径。例如,要将当前用户的默认shell更改为Bash,可以执行:
chsh -s /bin/bash
系统会要求你输入当前用户的密码以确认此操作。确认后,用户的默认shell将被更改为Bash。但是似乎修改失败了。
1.3 指定脚本解释器
shell脚本中,#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 解释器。#! 被称作shebang。
#! 决定了脚本可以像一个独立的可执行文件一样执行,而不用在终端之前输入sh, bash, python, php等。
指定 bash 解释器
#!/bin/bash #!/usr/bin/env bash
1.4 shell 脚本执行方法
shell 脚本执行方法有多种,以如下helloworld.sh 为例
#!/bin/bash echo "Hello, world!"
可以使用下面的命令让 shell 以非交互模式运行:
sh /path/to/script.sh bash /path/to/script.sh source /path/to/script.sh ./path/to/script.sh
其中,source /path/to/script.sh 和 ./path/to/script.sh 是等价的。
除此之外,你还可以通过chmod命令给文件添加可执行的权限,来直接执行脚本文件:
chmod +x /path/to/script.sh #使脚本具有执行权限 /path/to/test.sh
二、注释
注释可以说明你的代码是什么作用,以及为什么这样写。shell 语法中,注释是特殊的语句,会被 shell 解释器忽略。
单行注释 - 以 # 开头,到行尾结束。
多行注释 - 以 :< echo用于字符串的输出。 输出普通字符串 输出含有变量的字符串 输出转义字符,需要使用-e参数。 printf 不会像 echo 一样自动添加换行符,如果需要换行可以手动添加 \n。 如下仿照ls -l 的输出格式,对文件夹信息进行打印输出 Bash 中没有数据类型,bash 中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量,给变量赋值会直接创建变量。 变量赋值时,等号左右不能有空格。访问变量的语法为:$var 或 ${var}。 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。 环境变量是对当前 shell 会话内所有的程序或脚本都可见的变量。创建它们跟创建局部变量类似,但使用的是 export 关键字,shell 脚本也可以定义环境变量。 常见的环境变量:# echo '这是单行注释'
########## 这是分割线 ##########
:<
三、shell 字符串输出
3.1 echo
echo "hello!"
name=xiaoyuzhou
echo "hello, \"${name}\""
# 输出含换行符的字符串
echo -e "first\nsecond"
# \c 不换行
echo -e "first \c"
echo "second"
3.2 printf 格式化输出字符串
四、变量
name="xiaoyuzhou"
gender="male"
echo ${name}
readonly name
# name="newname" # 放开注释,执行报错
unset gender
五、环境变量
变量 描述 $HOME 当前用户的用户目录 $PATH 用分号分隔的目录列表,shell 会到这些目录中查找命令 $PWD 当前工作目录 $RANDOM 0 到 32767 之间的整数 $UID 数值类型,当前用户的用户 ID $PS1 主要系统输入提示符 $PS2 次要系统输入提示符
还没有评论,来说两句吧...