sudo cat /etc/shells
> >> 2> 2>> &>
> 重定向
history > a.txt
>> 追加
echo "我爱你" >> a.txt
2> 错误内容重定向
ls c.txt
ls c.txt > b.txt
2>> 错误内容追加
&> 正确信息和错误信息同时导出
| 管道
修改shell环境
grep lhz /etc/passwd
usermod -s /bin/tcsh lhz
chsh -s /bin/bash lhz
Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。
pstree
变量名=变量值
x=11
echo $x
echo ${x}
# 取消变量
unset x
name="Shell"
url="http://www.baidu.com/shell/"
str1=$name$url #中间不能有空格
str2="$name $url" #如果被双引号包围,那么中间可以有空格
str3=$name": "$url #中间可以出现别的字符串
str4="$name: $url" #这样写也可以
str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5
echo $PATH
echo $UID
echo $HOME
echo $PWD
echo $SHELL
echo $1
echo $2
echo $3
sh demo02.sh 1 2 3
变量名 | 含义 |
---|---|
$0 | 当前所在进程或脚本名 |
$$ | 当前运行经常的PID号 |
$? | 命令执行后返回状态,0表示正常,1表示其他异常 |
$# | 已加载的位置遍历的个数 |
$* | 所有位置变量的值 |
双引号 | 允许扩展,以$引用其他遍历 |
单引号 | 禁止扩展,$视为普通字符串 |
反引号 | 将命令的执行作为变量的值,$()与反引号等效 |
read 定义变量
read -p "请输入账号 >>> " account
read -p "请输入密码 >>> " passwrod
# -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
# -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
# -p 后面跟提示信息,即在输入前打印提示信息。
# -e 在输入的时候可以使用命令补全功能。
# -n 后跟一个数字,定义输入文本的长度,很实用。
# -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
# -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
# -t 后面跟秒数,定义输入字符的等待时间。
# -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
export 定义全局变量
echo $[5/2]
echo $((5/2))
let i=1+1
echo ${i}
echo "1.2+3.4" | bc
echo "1.2+3.4;5.6+7.8" | bc
echo "scale=2;10/5" | bc
表达式成立返回1
表达式不成立返回0
echo "5==2" | bc
echo -e "\033[34mOK\033[0m"
echo $TT
[ -z $TT ]
$?
如果字符串为空结果为0
如果字符串非空结果为1
判读系统用户是不是lhz
[ $USER == lhz ]
echo $?
[ $USER != lhz ]
echo $?
操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-ge | 大于或等于(Greater or Equal) |
-le | 小于或等于(Less or Equal) |
-gt | 大于(Greater Than) |
-lt | 小于(Less Than) |
[ 3 -eq 3 ]
echo $?
whoami;显示的是当前用户下的用户名
who am i:显示的是登录时的用户名
who:显示当前真正登录系统中的用户(不会显示那些用su命令切换用户的登录者)
[ $(whoami | wc -l) -gt 1 ]
echo $?
操作符 | 含义 |
---|---|
-e | 判断对象是否存在(Exist),罗存在着结果为真 |
-d | 判断对象是否为目录(Directory),是结果为真 |
-f | 判断对象是否为文件(File),是结果为真 |
-r | 判断对象是否有可读(Read)权限,有结果为真 |
-w | 判断对象是否有可写(Write)权限,有结果为真 |
-x | 判断对象是否有可执行(eXcute)权限,有结果为真 |
[ -d /home/lhz ]
操作符 | 含义 |
---|---|
; | 按顺序执行不关心前一条命令执行是否成功 |
&& | 当前一条命令执行成功后,执行后一条命令 |
|| | 二选一 ,如果前一个执行成功后一个不执行,如果前一个执行不成功则执行后一个 |
cd /etc ; ls
cd /etc && ls
cd /etc || ls
[ $USER == "lhz" ] && echo Y || echo N
# 解决 linux下编译运行.sh文件报错 “[: XXXX: unexpected operator” 问题
sudo dpkg-reconfigure dash
与:-a,当指定多个条件时,默认为与关系
或:-o
非:!,这是个单目操作符
#!/bin/bash
read -p "请输入账号 >>> " account
read -p "请输入密码 >>> " password
if [ ${account} == admin -a ${password} == 123456 ]
then
echo "欢迎李昊哲"
else
echo "账号或者密码错误"
fi
#!/bin/bash
read -p "请输入账号 >>> " account
read -p "请输入密码 >>> " password
if [ ${account} == admin ] && [ ${password} == 123456 ]
then
echo "欢迎李昊哲"
else
echo "账号或者密码错误"
fi
for 变量 in 值列表
do
循环体
done
for ((变量初始值;变量条件;变量变化))
do
循环体
done
arr=(1 3 5 7 9)
echo ${arr[1]}
len=${#arr[@]}
echo $len
len=${#arr[*]}
echo $len
function 函数名{}
函数名(){}
Stream Editor
- 非交互式
- 逐行处理
- 可以对文本进行增、删、改、查等操作
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
- -e
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);直接修改源文件
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
sed '2p' /etc/hosts
sed -n '2p' /etc/hosts
sed -n '6,7p' /etc/hosts
cat /etc/network/interfaces