GVKun编程网logo

Linux下SHELL的PS1变量简介(linux中的ps1变量)

26

此处将为大家介绍关于Linux下SHELL的PS1变量简介的详细内容,并且为您解答有关linux中的ps1变量的相关问题,此外,我们还将为您介绍关于armlinux下shellgpio点灯、linux

此处将为大家介绍关于Linux下SHELL的PS1变量简介的详细内容,并且为您解答有关linux中的ps1变量的相关问题,此外,我们还将为您介绍关于arm linux下shell gpio点灯、linux – 为什么env不打印PS1变量?、Linux 下Shell的使用、Linux 下shell的可执行脚本, 遇到"elif"分支不能执行的问题.的有用信息。

本文目录一览:

Linux下SHELL的PS1变量简介(linux中的ps1变量)

Linux下SHELL的PS1变量简介(linux中的ps1变量)

Linux下SHELL的PS1变量简介

Linux环境变量中PS1是很重要的环境变量:

PS(Prompt Sign): 是指命令提示符,例如在Fedora 12的终端下:[liutao@liutao ~]$ ,在设定PS1环境变量时,我们需要用到预设的一些特殊符号来设定PS1,下面是鸟哥书上关于BASH的特殊变量。

o \d :代表日期,格式为 Weekday Month Date,例如 "Mon Aug 1"

o \H :完整的主机名称。举例来说,鸟哥的练习机 linux.dmtsai.tw ,那么这个主机名称就是 linux.dmtsai.tw www.2cto.com

o \h :仅取主机名称的第一个名字。以上述来讲,就是 linux 而已, .dmtsai.tw 被省略。

o \t :显示时间,为 24 小时格式,如: HH:MM:SS

o \T :显示时间,12 小时的时间格式!

o \A :显示时间,24 小时格式, HH:MM

o \u :目前使用者的账号名称;

o \v :BASH 的版本信息;

o \w :完整的工作目录名称。家目录会以 ~ 取代;

o \W :利用 basename 取得工作目录名称,所以仅会列出最后一个目录名。

o # :下达的第几个指令。

o $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 。

Fedora 12下,PS1 内容为:

鸟哥书上的例子为: [root@linux /home/dmtsai 16:50 #12]#

                                          PS1=''[\u@\h \w \A #\#]\$ ''

在Fedora 12上的实现:

在上例中我们看出了,PS1在赋值的时用了单引号(‘),下面我们将讨论下在SHELL变量赋值,先看鸟哥书上的变量赋值:

  1. 变量与变量内容以等号( = )来连结;

  2. 等号两边不能直接接空格符;

  3. 变量名称只能是英文字母与数字,但是数字不能是开头字符;

  4. 若在赋值中有空格符可以使用双引号或单引号来将变量内容结合起来,但须要特别留意, 双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符;

  5. 必要时需要以反斜杠(\)来将特殊符号 ( 如 Enter, $, , 空格符, '' 等 ) 变成一般符号;

  6. 在一串指令中,还需要藉由其它的指令提供的信息,可以使用引用字符( command );(特别特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号!) www.2cto.com

  7. 若该变量为扩增变量内容时,则需以双引号及 $变量名称 如: "$PATH":/home继续累加内容;

  8. 若该变量需要在其它子程序执行,则需要以 export 来使变量变成环境变量, 如export PATH

  9. 通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断 ( 纯粹依照使用者兴趣与嗜好 ) ;

  10. 取消变量的方法为: unset 变量名称。

那么在PS1的设置中,因为中间有空格,所以我们需要用单双引号,没有与需要用到命令的结果,所以不需要引用。而我们选择单引号是为了让PS1直接接受纯字符,而不是在SHELL中有特殊意义的字符,或者以$开头的变量,所以我们用单引号即可,当让也可以用双引号。

arm linux下shell gpio点灯

arm linux下shell gpio点灯

我使用的lichee Pi 芯片是全志的v3s。摸索一下linux的点灯。

我的代码

#!/bin/sh
echo "led run!"
echo 36 > /sys/class/gpio/unexport
echo 37 > /sys/class/gpio/unexport
echo 36 > /sys/class/gpio/export
echo 37 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio36/direction
echo out > /sys/class/gpio/gpio37/direction
for i in `seq 10`
    do
        echo 1 > /sys/class/gpio/gpio36/value
        echo 0 > /sys/class/gpio/gpio37/value
        sleep 1s
        echo 0 > /sys/class/gpio/gpio36/value
        echo 1 > /sys/class/gpio/gpio37/value
        sleep 1s
    done
echo 36 > /sys/class/gpio/unexport
echo 37 > /sys/class/gpio/unexport

这个36 37的意思是这样,我用的io口是PB4 PB5,根据规则:

PORT端口中的引脚序号与GPIOx的对应关系:

GPIOx = P*32+N

P:PORTA=0,PORTB=1,PORTC=2,...

N:PA0=0,PA1=1,...,PB0=0,PB3=3,...,PD5=5,...

例如:

PA3:x=0*32+3=3,即对应GPIO3;

PA8:x=0*32+8=8,即对应GPIO8;

...

PH6:x=7*32+6=230,即对应GPIO230;

因此 PB4 =1*32+4= GPIO36

然后#!/bin/sh 是因为我的v3s里面的shell是sh,不是bash。

linux – 为什么env不打印PS1变量?

linux – 为什么env不打印PS1变量?

当我们打印PS1的值时,它被设置为:

$echo $PS1
[\u@\h \W]\$

我们可以使用env命令打印环境变量.为什么不列出PS1变量?

$env | grep PS1
# No output here

解决方法

因为PS1不是(通常,在您的特定情况下)环境变量.

在bash实例中设置了许多变量,您可以列出:

$set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:…
BASH_ALIASES=()
BASH_ARGC=()
.
.
SHLVL=1
SSH_AGENT_PID=853
SSH_AUTH_SOCK=/tmp/ssh-Ofupc03xWIs7/agent.795
TERM=xterm-256color

但其中许多不是环境变量.例如:

$echo "$PPID"
1062

$env | grep PPID

您可以使用export将变量添加到环境中.所以PS1可以设置为环境变量:

$export PS1
$env | grep PS1
PS1=\u@\h:\w\$

并且可以通过使用declare删除其导出标志来取消导出变量(这将保留变量的值,只是不导出):

$declare +x PS1
$env | grep PS1
$echo $PS1
\u@\h:\w\$

或者,更彻底地,通过取消变量:

$unset PS1
$env | grep PS1

在bash中,declare可用于打印变量的标志:

$declare -p PS1
declare -- PS1="\${debian_chroot:+(\$debian_chroot)}\\u@\\h:\\w\\\$"

$export PS1

$declare -p PS1
declare -x PS1="\${debian_chroot:+(\$debian_chroot)}\\u@\\h:\\w\\\$"

注意变量导出后的-x设置.

Linux 下Shell的使用

Linux 下Shell的使用

1、shell基本参数

#cat /etc/shells 系统提供的shell位置

#bsh、csh、ksh、bash 改变root用户的shell环境

#chsh  改变普通用户的shell环境

#more /etc/passwd 查看所有用户的shell环境

2、shell变量

2.1、环境变量

#set | more  查看环境变量

2.2、常用环境变量介绍

#echo $USER 显示当前用户登录名

#echo $UID 显示当前用户的用户号

#echo $SHELL 显示当前用户的登陆Shell

#echo $HOME 显示当前用户的宿主目录

#echo $PWD 显示当前用户所在的目录

#echo $PATH 表示当前用户的命令搜索路径

#echo $PS1 显示当前用户的主提示符

#echo $PS2 显示当前用户的辅助提示符

2.3、环境变量配置文件

#ls -l /etc/bashrc  /etc/profile  显示环境变量的全局配置文件

"bashrc"文件用于定义全局的函数和别名,文件的内容除了为系统中所有登录用户提供设置外,也适用于非交互Shell和非登录Shell

"profile"文件负责设置全局的环境,并应用于所有的用户登录Shell

#ls -l /home/username/.bash_profile   /home/username/.bashrc  显示用户username的配置文件

#cd /etc/skel  进入初始的用户配置文件

#cp .bash_logout .bash_profile .bashrc .emacs .gtkrc  /home/username 复制用户的初始配置文件到用户username的宿主目录下(当用户对自己的配置文件设置出错时使用)

2.4、位置变量

格式:$n n从1到9

单引号(''''):不进行任何的变量替换,保持字符串的原始值

双引号(""):以变量的值来替换,并作为字符串的一部分

反引号(``):用于进行命令替换,引号中命令的执行结果将替换命令本身作为字符串

2.5、预定义变量

#echo $# 表示位置参数的变量

#echo $* 表示位置参数的内容

#echo $? 表示命令执行后返回的状态,用于检查一个命令的执行是否正确;在Linux中,命令退出状态为0表示命令正确执行,任何非0值表示命令执行错误

#echo $$ 表示当前进程的进程号

#echo $! 表示后台运行的最后一个进程号

#echo $0 表示当前执行的进程名

2.6、用户自定义变量

#变量名=变量值 DAY=Sunday

#echo $变量名  echo $DAY

#unset -f -v name

2.7、Bash常用功能

#history  历史命令查看

#history -c 命令历史清除

2.8、命令别名

#alias 命令=''新命令''   alias ll=''ls -l'' 使用ll别名更换ls -l命令

#unalias -a name  取消命令别名

#cd /etc/profile.d/ 查看系统别名定义文件

3、管道与重定向

3.1、输入重定向

#wc /etc/passwd  计算文件/etc/passwd中的字符数、单词数和行数

#wc < /etc/passwd  将"/etc/passwd"文件中的内容输入重定向到WC命令中

3.2、输出重定向

#cat /etc/passwd  >file  将/ect/passwd下的内容覆盖到file中

#cat /etc/passwd  >>file  将/etc/passwd下的内容追加到file中

#aaa 2>errfile 将aaa命令显示的错误结果输入到errfile中

#ls afile bfile &>allfile 将标准输出和错误输出重定向到同一个文件

#ls /etc/passwd/ | head -5 显示passwd中前5行内容

4、Shell脚本

#ls -l /etc/init.d/目录中存在着数量相当多的系统服务启动程序,这些程序全部都是Shell脚本文件,可以使用file命令查询这些文件的类型

#bash *.sh  使用shell命令执行脚本

#. /home/techer/filename.sh 执行filename.sh

shell里面比较大小

#!/bin/bash

if [ $1 -gt $2 ]

then echo "$1>$2"

else echo "$2>$1"

fi

# 数字判断一些命令

#-gt是大于的意思

#-lt是小于

#-eq是等于

#-ne是不等于

#-ge是大于等于

#le是小于等于  

Linux 下shell的可执行脚本, 遇到

Linux 下shell的可执行脚本, 遇到"elif"分支不能执行的问题.

我在Linux下写了个脚本,做些事情,代码大概如下

#!/bin/sh

....do something1

if [ $? -eq 1 ]; then

....do something2

elif [ $? -eq 2 ]; then

    echo "hello"

    xxxxx;

    ....

fi


该脚本没有显示语法错误,可以运行,

但是等条件满足,来到"elif"分支的时候,它就是无法执行这里的语句(连echo都不行),这是为什么???


关于Linux下SHELL的PS1变量简介linux中的ps1变量的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于arm linux下shell gpio点灯、linux – 为什么env不打印PS1变量?、Linux 下Shell的使用、Linux 下shell的可执行脚本, 遇到"elif"分支不能执行的问题.的相关知识,请在本站寻找。

本文标签: