shell编程

shell编程

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
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 函数名{}
函数名(){}

sed

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

你可能感兴趣的:(大数据,云计算,人工智能,linux,服务器,运维)